kubelet tls 证书的用途是什么

What is the purpose of kubelet tls certificates

我看到 kubelet 正在 /var/run/kubernetes/:

中创建一对自签名证书
# ll /var/run/kubernetes/
total 8
-rw-r--r--. 1 root root 1164 iul  6 05:38 kubelet.crt
-rw-------. 1 root root 1679 iul  6 05:38 kubelet.key

那些是他自己的tls配置用的,也设置了"CA:TRUE"。如果删除,它们将被重新创建。

我的第一个问题是用 CA:true 制作它们的目的是什么? kubelet 是否使用这些创建其他证书?如果是,目的是什么?

为什么 apiserver 会自动信任这些证书?

此致, 克里斯蒂安

kubelet 需要在端口 10250 上为其 HTTPS 服务器提供证书。它不需要签署证书,因此 CA:TRUE 是多余的。不确定为什么要这样创建。

IIRC,kube-apiserver 信任任何 运行 且未设置 --tls-ca-file 的证书。我记得一些较旧的 k8s 教程没有强制执行 TLS。

此外,anyone/anything 将可以不受限制地访问 kubelet,直到您打开 kubelet authentication

无论如何,如果您的 k8s 集群是 运行 这种方式,那么它就是不安全的。我建议使用 kargo、kops、kubeadm 或任何一种知名工具来提升集群。这些解决方案在设置过程中构建了适当的证书层次结构。

来自 kubelet's docs 的额外信息:

--cert-dir string    The directory where the TLS certs are located (by default /var/run/kubernetes). If --tls-cert-file and --tls-private-key-file are provided, this flag will be ignored. (default "/var/run/kubernetes")
--tls-cert-file string    File containing x509 Certificate for HTTPS.  (CA cert, if any, concatenated after server cert). If --tls-cert-file and --tls-private-key-file are not provided, a self-signed certificate and key are generated for the public address and saved to the directory passed to --cert-dir.
--port int32    The port for the Kubelet to serve on. (default 10250)