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

时间:2019-03-31 01:55:54

标签: kubernetes

我试图按照此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

问题:

  • 我在这里做什么错了?

2 个答案:

答案 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即可。