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

Kubernetes k8s-如何将服务帐户令牌投影到pod中,kubernetes,Kubernetes,我正在尝试将serviceAccount令牌投影到我的pod中,如本k8s文档中所述- 我使用下面的命令创建一个服务帐户 kubectl create sa acct 然后我创建了豆荚 kind: Pod apiVersion: v1 metadata: name: nginx spec: containers: - image: nginx name: nginx volumeMounts: - mountPath: /var/run/secrets/to

我正在尝试将serviceAccount令牌投影到我的pod中,如本k8s文档中所述-

我使用下面的命令创建一个服务帐户

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而失败。卷“vault token”的安装失败:无法获取令牌:服务器找不到请求的资源

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

问题:

  • 我做错了什么

您应该使用部署,因为当您使用部署时,令牌会自动装载到POD中。

我在kubeadm上尝试了这一点,并且能够成功。 @Aman Juneja是对的,您必须添加文档中描述的API标志

您可以通过创建serviceaccount,然后将此标志添加到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不想用这个标志开始,它被卡住了:
等待pods:apiserver
很快我将再次尝试调试

更新

事实证明,您只需将参数通过目录从minikubeVM的内部传递到minikube,而不是像我在前面的示例中所做的那样从外部传递到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就可以了

您是否使用文档中提到的必要标志启动了api服务器?上面的minikube命令不适用于上一个minikube版本1.8.2,您需要使用:
minikube-start--extra-config=apiserver.service-account-signing-key-file=/var/lib/minikube/certs/sa.key--extra-config=apiserver.service-account-issuer=kubernetes/servicecomport--extra-config=apiserver.service-account-api-viewers=api