为什么kubelet使用TLS与apiserver通信需要密码?v1.3

时间:2016-07-26 15:06:58

标签: ssl kubernetes

我在主节点上使用TLS部署了apiserver并且工作正常,我在部署kubelet时出现了问题并且需要与apiserver进行通信。 kubelet如下:

/opt/bin/kubelet \
  --logtostderr=true \
  --v=0 \
  --api_servers=https://kube-master:6443 \
  --address=0.0.0.0 \
  --port=10250 \
  --allow-privileged=false \
  --tls-cert-file="/var/run/kubernetes/kubelet_client.crt" \
  --tls-private-key-file="/var/run/kubernetes/kubelet_client.key"
  --kubeconfig="/var/lib/kubelet/kubeconfig"

/ var / lib / kubelet / kubeconfig如下:

apiVersion: v1
kind: Config
users:
- name: kubelet
  user:
    client-certificate: /var/run/kubernetes/kubelet_client.crt
    client-key: /var/run/kubernetes/kubelet_client.key
clusters:
- name: kube-cluster
  cluster:
    certificate-authority: /var/run/kubernetes/ca.crt
contexts:
- context:
    cluster: kube-cluster
    user: kubelet
  name: ctx-kube-system
current-context: ctx-kube-system

由于我希望使用双向(客户端和服务器)CA身份验证来实现通信,并希望获得一个不稳定的回复,但是apiserver要求我提供我之前从未使用过的用户名和密码,一些命令行如下:

> kubectl version
> Client Version: version.Info{Major:"1", Minor:"3", GitVersion:"v1.3.2", GitCommit:"9bafa3400a77c14ee50782bb05f9efc5c91b3185", GitTreeState:"clean", BuildDate:"2016-07-17T18:30:39Z", GoVersion:"go1.6.2", Compiler:"gc", Platform:"linux/amd64"}
> Please enter Username: kubelet
> Please enter Password: kubelet
> error: You must be logged in to the server (the server has asked for the client to provide credentials)

我在主人奴才上尝试了所有这些。有人可以解决这个难题吗?先谢谢。

1 个答案:

答案 0 :(得分:2)

您必须通过apiserver上的--client-ca-file标志启用客户端证书授权。

来自http://kubernetes.io/docs/admin/authentication/

  通过将--client-ca-file=SOMEFILE选项传递给apiserver来启用

客户端证书身份验证。引用的文件必须包含一个或多个证书颁发机构,用于验证提供给apiserver的客户端证书。如果提供并验证了客户端证书,则主题的公用名称将用作请求的用户名。

来自http://kubernetes.io/docs/admin/kube-apiserver/

  

--client-ca-file="":如果设置,则任何呈现由客户端ca文件中的某个权限签名的客户端证书的请求都将使用与客户端证书的CommonName对应的标识进行身份验证。         --cloud-config="":云提供商配置文件的路径。没有配置文件的空字符串。