kubectl run コマンドを使用して、デフォルト以外のサービス アカウントを使用する Pod を作成するにはどうすればよいでしょうか? 質問する

kubectl run コマンドを使用して、デフォルト以外のサービス アカウントを使用する Pod を作成するにはどうすればよいでしょうか? 質問する

kubectl run コマンドを使用して、デフォルトの serviceaccout ではなくカスタム サービス アカウント「svcacct1」を使用する Pod を作成しようとしています。run コマンド内に特定の serviceaccount を提供するためのスイッチがないようですので、以下に示すように --overrides スイッチを利用して JSON を提供します。

kubectl run ng2 --image=nginx --namespace=test --overrides='{ "apiVersion": "apps/v1", "spec": { "serviceAccount": "svcacct1" , "serviceAccountName": "svcacct1" }  }' -o yaml

これにより、Pod (およびデプロイメント) が正常に作成されますが、「svcacct1」は活用されず、代わりに以下に示すように「default」が使用されます (出力の関連部分のみが表示されます)。

> kubectl get po ng2-569d45c6b5-c9zhp -o yaml -n test

spec:
  containers:
  - image: nginx
    imagePullPolicy: Always
    name: ng2
    resources: {}
    terminationMessagePath: /dev/termination-log
    terminationMessagePolicy: File
    volumeMounts:
    - mountPath: /var/run/secrets/kubernetes.io/serviceaccount
      name: default-token-cpwjr
      readOnly: true
  dnsPolicy: ClusterFirst
  enableServiceLinks: true
  nodeName: minikube
  priority: 0
  restartPolicy: Always
  schedulerName: default-scheduler
  securityContext: {}
  serviceAccount: default
  serviceAccountName: default
  terminationGracePeriodSeconds: 30 

また、アカウントは正しい名前空間に存在します。

> kubectl get serviceaccount svcacct1 -o yaml -n test

apiVersion: v1
kind: ServiceAccount
metadata:
  creationTimestamp: "2019-05-01T11:56:52Z"
  name: svcacct1
  namespace: test
  resourceVersion: "632061"
  selfLink: /api/v1/namespaces/test/serviceaccounts/svcacct1
  uid: 3573ffc6-6c08-11e9-9c81-0800270172ea
secrets:
- name: svcacct1-token-q9ksc

これが機能するために何が欠けているかは明らかではありません。

ベストアンサー1

この--serviceaccountフラグは現在のバージョン(1.21)には存在せず、変更履歴

しかし、質問に記載されているコマンドを少し変更すると、機能します。

kubectl run -ti debug --image=praqma/network-multitool --overrides='{ "spec": { "serviceAccount": "your-sa-here" }  }' sh

おすすめ記事