web-dev-qa-db-ja.com

kubernetes / Dockerでマップされたボリュームのアクセス許可を変更する方法

Dockerファイルを使用して画像を作成し、使用したユーザーを変更しました。

USER myuser

データを保存するためにディレクトリを使用していますが、次を使用してディレクトリのアクセス許可を変更します。

chown -R myuser:myuser /data-dir

このDockerファイルはetcd用で、etcdが/ data-dirを使用してデータを保存する場所です。次に、kubernetes ymlファイルを使用して/ data-dirをefsボリュームにマッピングします。

以下のコードで:

volumeMounts:
        - name: etcdefs
          mountPath: /data-dir
      volumes:
      - name: etcdefs
        persistentVolumeClaim:
          claimName: efs-etcd

この後、マップされたディレクトリ/ data-dirにはmyuser:myuserとしての権限が必要ですが、ディレクトリをroot:rootとして作成する必要があります

ここで私が間違っていることを提案できる人はいますか?

8
Sagan Pariyar

これは、Dockerが原因です。ルート権限のみでボリュームをマウントし、chmodを使用してボリュームを変更できますが、コンテナーを起動した後でのみ変更できます。

詳しくはこちらをご覧ください https://github.com/moby/moby/issues/2259 この問題は長い間ここにあります。

Kubernetesでできることは、fsGroupforceを使用することです。そのボリュームは、指定されたGIDによって書き込み可能です。これは実用的なソリューションであり、文書化されています。詳細はこちら https://kubernetes.io/docs/tasks/configure-pod-container/security-context/

展開の例を次に示します。

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
17
3h4x