Kubernetes 401未经授权,令牌未复制到容器中

时间:2016-12-28 13:48:57

标签: kubernetes distributed-computing

正在使用机密创建服务帐户,但是在创建pod时,看起来令牌和ca证书不会复制到pod中。

日志显示:

[2016-12-27 16:16:29,012][WARN ][io.fabric8.elasticsearch.discovery.k8s.K8sUnicastHostsProvider] 
[James Dr. Power] Exception caught during discovery javax.ws.rs.WebApplicationException : HTTP 401 Unauthorized

pod的环境变量包括:

KUBERNETES_CA_CERTIFICATE_FILE=/var/run/secrets/kubernetes.io/serviceaccount/ca.crt

但是,目录/ var / run为空

es-master-gqq7m:/var/run# pwd
/var/run 

es-master-gqq7m:/var/run# ls -la 
total 0
drwxr-xr-x    2 root     root             6 Jun 12  2015 . 
drwxr-xr-x    9 root     root            81 Jun 12  2015 ..

复制控制器的完整定义是here,包括:

spec:
  serviceAccount: elasticsearch
  env: 
    - name: KUBERNETES_CA_CERTIFICATE_FILE 
      value: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt

[cstelly@smcluster ~]$ kubectl get serviceaccounts
NAME            SECRETS   AGE
default         1         29d
elasticsearch   1         4d

有什么想法吗?

谢谢!

修改

作为对this的回应,目前apiconfig有标志

--admission-control=AlwaysAdmit \

关于音量信息,我跑了

kubectl describe pod <pod-name>,我看到的唯一卷信息是:

Volumes:
  storage:
    Type:   EmptyDir (a temporary directory that shares a pod's lifetime)
    Medium: 

2 个答案:

答案 0 :(得分:0)

创建容器时,应将服务帐户令牌密钥添加为卷。这是由ServiceAccount准入插件完成的。

有些问题:

  1. 如果您检查API中的某个正在运行的pod,它是否包含引用服务帐户令牌的卷和卷装?

  2. 您为API服务器配置了哪些录入插件?

答案 1 :(得分:0)

令牌本身是在准入控制处理期间创建的。

建议用于&gt; 1.4的设置是

--admission-control=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,ResourceQuota

请注意“ServiceAccount”部分!

See original doc