K8s - 如何将服务帐户令牌投影到 Pod 中



我正在尝试将服务帐户令牌投影到我的 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 中。

最新更新