Je viens de créer une image en utilisant le fichier Docker et pour changer d'utilisateur, je viens d'utiliser:
USER myuser
Nous utilisons un répertoire pour stocker des données, nous modifions cette autorisation de répertoire en utilisant:
chown -R myuser:myuser /data-dir
Ce fichier Docker est pour etcd, où nous voulons que/data-dir soit utilisé par etcd pour stocker les données. Maintenant, nous mappons le répertoire/data-dir au volume efs à l'aide du fichier kubernetes yml.
Avec le code ci-dessous:
volumeMounts:
- name: etcdefs
mountPath: /data-dir
volumes:
- name: etcdefs
persistentVolumeClaim:
claimName: efs-etcd
Après cela, je m'attends à ce que le répertoire/répertoire de données mappé ait la permission en tant que myuser: myuser mais qu'il crée le répertoire en tant que root: root
Quelqu'un peut-il suggérer ce que je fais mal ici?
C'est à cause de docker. Il monte le volume uniquement avec l'autorisation root et vous pouvez le modifier avec chmod
mais uniquement après le démarrage du conteneur.
Vous pouvez en savoir plus à ce sujet ici https://github.com/moby/moby/issues/2259 Ce problème est là depuis longtemps.
Ce que vous pouvez faire dans kubernetes est d'utiliser fsGroup
et forcer que le volume soit accessible en écriture par le GID spécifié. C'est une solution de travail et également documentée. Plus d'informations ici https://kubernetes.io/docs/tasks/configure-pod-container/security-context/
Voici un exemple de déploiement:
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: Alpine
spec:
replicas: 1
template:
metadata:
labels:
app: Alpine
spec:
securityContext:
fsGroup: 1000
containers:
- name: Alpine
image: Alpine
volumeMounts:
- mountPath: /var/Alpine
name: Alpine
volumes:
- name: Alpine
awsElasticBlockStore:
volumeID: vol-1234567890
fsType: ext4