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 中添加配置 --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 \
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 \