web-dev-qa-db-ja.com

Kubernetes:VolumeMountユーザーグループとファイルのアクセス許可を設定する方法

Kopsを使用してAWSでKubernetesクラスターを実行しています。 EBSボリュームをコンテナにマウントし、アプリケーションから表示できますが、アプリケーションがルートとして実行されないため、読み取り専用です。ルート以外のユーザーとしてPersistentVolumeClaimをマウントするにはどうすればよいですか? VolumeMountには、マウントされたパスのユーザー、グループ、またはファイルのアクセス許可を制御するオプションがないようです。

これが私のデプロイメント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
27

ポッドセキュリティコンテキストは、fsGroupの設定をサポートします。これにより、ボリュームを所有するグループIDを設定できるため、誰がそれに書き込むことができます。ドキュメントの例:

apiVersion: v1
kind: Pod
metadata:
  name: hello-world
spec:
  containers:
  # specification of the pod's containers
  # ...
  securityContext:
    fsGroup: 1234

これに関する詳細は こちら

25
AlexBrand

私の場合、カスタムGrafanaイメージに適切な権限を設定するために、メインコンテナと同じvolumeMountを持つinitContainerになりました。

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

これは、ポッドのメインイメージがルート以外のユーザーとして実行されており、マウントされたボリュームへの書き込み権限が必要な場合に必要です。

17
sshow

K8sバージョン1.10以降では、fsGrouprunAsGroupに置き換えられました。

実装はここで追跡できます: https://github.com/kubernetes/features/issues/21

5
Yalok Iy

これは、非rootユーザーとしてコンテナ内でプロセスを実行する必要がある場合のKubernetesの展開/ステートフルセットの課題の1つとしてもたらされました。ただし、ボリュームをポッドにマウントすると、常にroot:rootの許可でマウントされます。そのため、非rootユーザーは、データの読み取りおよび書き込みを行うフォルダーへのアクセス権を持っている必要があります。

同じために以下の手順に従ってください。

  1. ユーザーグループを作成し、DockerfileでgroudIDを割り当てます。
  2. ユーザーIDでユーザーを作成し、Dockerfileのグループに追加します。
  3. ユーザープロセスが読み取り/書き込みを行うフォルダーの所有権を再帰的に変更します。
  4. ポッド仕様コンテキストのdeployment/Statefulsetに以下の行を追加します。

    spec:securityContext:runAsUser:1099 runAsGroup:1099 fsGroup:1099

runAsUser:ポッド内の任意のコンテナに対して、すべてのプロセスがユーザーID 1099で実行されることを指定しますrunAsGroup:ポッドの任意のコンテナ内のすべてのプロセスに対して1099のプライマリグループIDを指定します(このフィールドが省略された場合、コンテナはroot(0)になり、runAsGroupが指定されている場合、作成されたファイルはすべてユーザー1099およびグループ1099によって所有されます)fsGroup:接続されたボリュームの所有者がGroupId 1099によって所有者になることを指定し、その下で作成されたファイルには許可が与えられます非rootgroup:nonrootgroupの。

0
rajdeepbs29