许吉友 - 运维

配置踩坑笔记

kube-controller-manager 认证问题

kube-apiserver 中的 --service-account-key-file 要和 cube-controller-manager 中的 --service-account-private-key-file 要配对,见:https://kubernetes.io/zh/docs/reference/access-authn-authz/service-accounts-admin/

博客:https://www.cnblogs.com/effortsing/p/10356699.html

--service-account-key-file 配公钥,--service-account-private-key-file 配私钥。

生成公钥与私钥 :

$ openssl genrsa -out sa.key 2048
$ openssl rsa -in sa.key -pubout -out sa.pub

最终配置:

Kube-controller-manager:

--service-account-private-key-file=/etc/kubernetes/cert/service-account/sa.key

Kube-apiserver

--service-account-key-file=/etc/kubernetes/cert/service-account/sa.pub 

组件用户配置

要把 kube-controller-manager 的用户加入到 名为 system:kube-controller-manager 的 clusterrolebinding 中去。

kubelet 认证 及授权问题

官方文档:https://kubernetes.io/zh/docs/reference/command-line-tools-reference/kubelet-authentication-authorization/

kubelet 配置

要在 kubelet 中添加配置 --client-ca-file=/etc/kubernetes/cert/ca.pem

另外 --tls-cert-file--tls-private-key-file 不是必要的,如果没有这俩配置,kubelet 会在 --cert-dir 配置的目录中(默认为 "/var/lib/kubelet/pki")生成 kubelet 服务端的证书和私钥。

下面是我的 kubelet 的相关配置:

--client-ca-file=/etc/kubernetes/cert/ca.pem \
--tls-cert-file=/etc/kubernetes/cert/kubelet/kubelet.pem \
--tls-private-key-file=/etc/kubernetes/cert/kubelet/kubelet-key.pem \

kube-apiserver 配置

Kubelet 的认证方式是双向认证,所以也需要配置客户端证书,这里除了 ca.pem 外,应该不相同的,但是我为了方便,配置了相同的证书。

--kubelet-certificate-authority=/etc/kubernetes/cert/ca.pem \
--kubelet-client-certificate=/etc/kubernetes/cert/kubelet/kubelet.pem  \
--kubelet-client-key=/etc/kubernetes/cert/kubelet/kubelet-key.pem  \