如何使用 kubectl 运行 命令创建使用非默认服务帐户的 Pod?
How to create a Pod that uses non default service account using kubectl run command?
我正在尝试使用 kubectl 运行 命令创建一个使用自定义服务帐户 "svcacct1" 而不是默认服务帐户的 Pod。在 运行 命令中似乎没有提供特定服务帐户的开关,因此利用 --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
尚不清楚此功能缺少什么?
至少在kubectl 1.14中有这样一个标志:
$ kubectl version --client
Client Version: version.Info{Major:"1", Minor:"14", GitVersion:"v1.14.0", GitCommit:"641856db18352033a0d96dbc99153fa3b27298e5", GitTreeState:"clean", BuildDate:"2019-03-26T00:04:52Z", GoVersion:"go1.12.1", Compiler:"gc", Platform:"darwin/amd64"}
$ kubectl run -h | grep -- "--serviceaccount"
--serviceaccount='': Service account to set in the pod spec
--serviceaccount
标志在当前版本 (1.21) 中不存在,并且已弃用,如 changelog 中所述。
但是稍微修改一下问题中提到的命令,就可以了:
kubectl run -ti debug --image=praqma/network-multitool --overrides='{ "spec": { "serviceAccount": "your-sa-here" } }' sh
我正在尝试使用 kubectl 运行 命令创建一个使用自定义服务帐户 "svcacct1" 而不是默认服务帐户的 Pod。在 运行 命令中似乎没有提供特定服务帐户的开关,因此利用 --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
尚不清楚此功能缺少什么?
至少在kubectl 1.14中有这样一个标志:
$ kubectl version --client
Client Version: version.Info{Major:"1", Minor:"14", GitVersion:"v1.14.0", GitCommit:"641856db18352033a0d96dbc99153fa3b27298e5", GitTreeState:"clean", BuildDate:"2019-03-26T00:04:52Z", GoVersion:"go1.12.1", Compiler:"gc", Platform:"darwin/amd64"}
$ kubectl run -h | grep -- "--serviceaccount"
--serviceaccount='': Service account to set in the pod spec
--serviceaccount
标志在当前版本 (1.21) 中不存在,并且已弃用,如 changelog 中所述。
但是稍微修改一下问题中提到的命令,就可以了:
kubectl run -ti debug --image=praqma/network-multitool --overrides='{ "spec": { "serviceAccount": "your-sa-here" } }' sh