J'exécute un cluster Kubernetes sur AWS à l'aide de kops. J'ai monté un volume EBS sur un conteneur et il est visible depuis mon application, mais il est en lecture seule car mon application ne s'exécute pas en tant que root. Comment monter une PersistentVolumeClaim
en tant qu'utilisateur autre que root? La VolumeMount
ne semble pas avoir d’option permettant de contrôler les autorisations d’utilisateur, de groupe ou de fichier du chemin monté.
Voici mon fichier de déploiement yaml:
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: notebook-1
spec:
replicas: 1
template:
metadata:
labels:
app: notebook-1
spec:
volumes:
- name: notebook-1
persistentVolumeClaim:
claimName: notebook-1
containers:
- name: notebook-1
image: jupyter/base-notebook
ports:
- containerPort: 8888
volumeMounts:
- mountPath: "/home/jovyan/work"
name: notebook-1
Le contexte de sécurité du pod prend en charge la définition d'une fsGroup
, qui vous permet de définir l'ID de groupe propriétaire du volume, ainsi que des personnes pouvant y écrire. L'exemple dans la documentation:
apiVersion: v1
kind: Pod
metadata:
name: hello-world
spec:
containers:
# specification of the pod's containers
# ...
securityContext:
fsGroup: 1234
Plus d'informations à ce sujet sont ici: https://kubernetes.io/docs/concepts/policy/security-context/
Je me suis retrouvé avec un initContainer
avec le même volumeMount que le conteneur principal pour définir les autorisations appropriées, dans mon cas, pour une image Grafana personnalisée.
initContainers:
- name: take-data-dir-ownership
image: Alpine:3.6
# Give `grafana` user (id 472) permissions a mounted volume
# https://github.com/grafana/grafana-docker/blob/master/Dockerfile
command:
- chown
- -R
- 472:472
- /var/lib/grafana
volumeMounts:
- name: data
mountPath: /var/lib/grafana
Cela est nécessaire lorsque l'image principale d'un pod s'exécute en tant qu'utilisateur autre que root et nécessite des autorisations d'écriture sur un volume monté.
Pour k8s version 1.10+, fsGroup
a été remplacé par runAsGroup
.
La mise en œuvre peut être suivie ici: https://github.com/kubernetes/features/issues/213