我正在尝试将服务帐户令牌投影到我的 pod 中,如此 k8s 文档中所述 - https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/#service-account-token-volume-projection。
我使用以下命令创建一个服务帐户
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
我的迷你版本:v0.33.1
库贝特尔版本 : 1.13
问题:
- 我在这里做错了什么?
我在 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,它就可以工作了。正如您将在描述 pod 中看到的:
Volumes:
vault-token:
Type: Projected (a volume that contains injected data from multiple sources)
[删除为无效解决方案]
不幸的是,就我而言,我的minikube不想从这个标志开始,它卡住了:waiting for pods: apiserver
很快我会尝试再次调试。
更新
事实证明,您只需将参数传递到minikube中,其中包含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
之后,创建服务帐户并应用 pod.yaml 即可工作。
使用部署,因为当您使用部署时,令牌会自动挂载到 Pod 中。