【问题标题】:What is the purpose of kubelet tls certificateskubelet tls 证书的用途是什么
【发布时间】:2017-12-16 14:57:23
【问题描述】:

我看到 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 会自动信任这些证书?

最好的问候, 克里斯蒂安

【问题讨论】:

    标签: kubernetes kubelet


    【解决方案1】:

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

    IIRC,kube-apiserver 信任任何证书,如果它在没有 --tls-ca-file 设置的情况下运行。我记得一些较旧的 k8s 教程没有强制执行 TLS。

    此外,在您开启 kubelet authentication 之前,任何人/任何事物都可以不受限制地访问 kubelet。

    无论如何,如果以这种方式运行,您的 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)
    

    【讨论】:

    • 集群是使用 kubeadm 创建的。从您的链接看来,默认 kubelet 配置将授权授予 apiserver。感谢您的帮助。
    • 如果在 Kubelet 配置中将 ServerTLSBootstrap 设置为 true,那么 Kubelet 将向 Kube API Server 发送证书签名请求,经批准后,Kubelet 将在 https 服务器中使用该请求,因为这是由 kubernetes CA Kube API 签名的服务器会接受它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-04
    • 2017-12-18
    • 1970-01-01
    • 2017-09-22
    • 1970-01-01
    • 2019-05-22
    • 1970-01-01
    相关资源
    最近更新 更多