web-dev-qa-db-fra.com

Kubernetes: comment définir les autorisations de groupes d'utilisateurs et de fichiers VolumeMount

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
14
Mikhail Janowski

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/

13
AlexBrand

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é.

5
sshow

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

1
Yalok Iy