我试图按照此k8s文档-https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/#service-account-token-volume-projection中的说明将serviceAccount令牌投影到我的广告连播中。
我使用以下命令创建服务帐户
kubectl create sa acct
然后我创建吊舱
kind: Pod
apiVersion: v1
metadata:
name: nginx
spec:
containers:
- image: nginx
name: nginx
volumeMounts:
- mountPath: /var/run/secrets/tokens
name: vault-token
serviceAccountName: acct
volumes:
- name: vault-token
projected:
sources:
- serviceAccountToken:
path: vault-token
expirationSeconds: 7200
由于-MountVolume.SetUp failed for volume "vault-token" : failed to fetch token: the server could not find the requested resource
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 5m15s default-scheduler Successfully assigned default/nginx to minikube
Warning FailedMount 65s (x10 over 5m15s) kubelet, minikube MountVolume.SetUp failed for volume "vault-token" : failed to fetch token: the server could not find the requested resource
我的minikube版本:v0.33.1
kubectl版本:1.13
问题:
答案 0 :(得分:0)
您应该使用部署,因为使用部署时,令牌会自动安装到Pod中。
答案 1 :(得分:0)
我在kubeadm上尝试了一下,并成功了。 @Aman Juneja是正确的,您必须按照文档中的说明添加API标志。
您可以通过创建服务帐户,然后将此标志添加到kubeapi中来实现:
sudo vim /etc/kubernetes/manifests/kube-apiserver.yaml
- --service-account-issuer=api
- --service-account-signing-key-file=/etc/kubernetes/pki/apiserver.key
- --service-account-api-audiences=api
之后,应用您的pod.yaml,它将起作用。正如您将在describe pod中看到的:
Volumes:
vault-token:
Type: Projected (a volume that contains injected data from multiple sources)
[已删除为无效解决方案]
不幸的是,在我的情况下,我的minikube不想从此标志开始,它卡在了waiting for pods: apiserver
上,不久我将尝试再次调试。
更新
结果是,您只需要将参数传递到带有minikubeVM内部而不是外部的目录的minikube中,就像我在前面的示例(即.minikube目录)中所做的那样,所以它看起来像这样:
minikube start \
--extra-config=apiserver.service-account-signing-key-file=/var/lib/minikube/certs/apiserver.key \
--extra-config=apiserver.service-account-issuer=api \
--extra-config=apiserver.service-account-api-audiences=api
之后,创建ServiceAccount并应用pod.yaml即可。