我在主节点上使用TLS部署了apiserver,它工作正常,当我部署kubelet并尝试与apiserver通信时,出现了我的问题。
kubelet conf如下:
/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)
我在奴才大师身上尝试了所有这些方法。有人能解决这个难题吗?谢谢。
最佳答案
您必须通过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=""
:如果已设置,则任何提出由client-ca文件中的授权机构之一签名的客户端证书的请求都将使用与客户端证书的CommonName对应的身份进行身份验证。
--cloud-config=""
:云提供商配置文件的路径。空字符串,无配置文件。
关于ssl - 为什么kubelet使用TLS与apiserver通信需要密码?v1.3,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38593566/