etcd
flannel
master&node
单节点配置k8s的过程各种认证证书,在之前的配置时,相信很多人已经完全给绕晕了。现在整理下各种证书的认证配置

一、ca.pem & ca-key.pem & ca.csr

建立完整TLS加密通信,需要有一个CA认证机构,会向客户端下发根证书、服务端证书以及签名私钥给客户端。ca.pem & ca-key.pem & ca.csr组成了一个自签名的CA机构。

证书名称作用
ca.pemCA根证书文件
ca-key.pem服务端私钥,用于对客户端请求的解密和签名
ca.csr证书签名请求,用于交叉签名或重新签名

二、token.csv

该文件为一个用户的描述文件,基本格式为 Token,用户名,UID,用户组;这个文件在 apiserver 启动时被 apiserver 加载,然后就相当于在集群内创建了一个这个用户;接下来就可以用 RBAC 给他授权

三、bootstrap.kubeconfig

该文件中内置了 token.csv 中用户的 Token,以及 apiserver CA 证书;kubelet 首次启动会加载此文件,使用 apiserver CA 证书建立与 apiserver 的 TLS 通讯,使用其中的用户 Token 作为身份标识像 apiserver 发起 CSR 请求

四、kubectl

kubectl只是个go编写的可执行程序,只要为kubectl配置合适的kubeconfig,就可以在集群中的任意节点使用 。kubectl的权限为admin,具有访问kubernetes所有api的权限。

证书名称作用
ca.pemCA根证书
admin.pemkubectl的TLS认证证书,具有admin权限
admin-key.pemkubectl的TLS认证私钥
--certificate-authority=/opt/kubernetes/ssl/ca.pem 设置了该集群的根证书路径, --embed-certs为true表示将--certificate-authority证书写入到kubeconfig中
--client-certificate=/opt/kubernetes/ssl/admin.pem 指定kubectl证书
--client-key=/opt/kubernetes/ssl/admin-key.pem 指定kubectl私钥

五、kubelet

证书名称作用
ca.pemCA根证书
kubelet-client.crtkubectl的TLS认证证书
kubelet-client.keykubectl的TLS认证私钥
kubelet.crt独立于 apiserver CA 的自签 CA
kubelet.key独立于 apiserver CA 的私钥

当成功签发证书后,目标节点的 kubelet 会将证书写入到 --cert-dir= 选项指定的目录中;此时如果不做其他设置应当生成上述除ca.pem以外的4个文件

  • kubelet-client.crt 该文件在 kubelet 完成 TLS bootstrapping 后生成,此证书是由 controller manager 签署的,此后 kubelet 将会加载该证书,用于与 apiserver 建立 TLS 通讯,同时使用该证书的 CN 字段作为用户名,O 字段作为用户组向 apiserver 发起其他请求
  • kubelet.crt 该文件在 kubelet 完成 TLS bootstrapping 后并且没有配置 --feature-gates=RotateKubeletServerCertificate=true 时才会生成;这种情况下该文件为一个独立于 apiserver CA 的自签 CA 证书,有效期为 1 年;被用作 kubelet 10250 api 端口

六、kube-apiserver

kube-apiserver是在部署kubernetes集群是最需要先启动的组件,也是和集群交互的核心组件。

使用的证书证书作用
ca.pemCA根证书
ca-key.pemCA端私钥
Server.pemkube-apiserver的tls认证证书
Server-key.pemkube-apiserver的tls认证私钥
--token-auth-file=/opt/kubernetes/cfg/token.csv 指定了token.csv的位置,用于kubelet 组件 第一次启动时没有证书如何连接 apiserver  Token  apiserver  CA 证书被写入了 kubelet 所使用的 bootstrap.kubeconfig 配置文件中;这样在首次请求时,kubelet 使用 bootstrap.kubeconfig 中的 apiserver CA 证书来与 apiserver 建立 TLS 通讯,使用 bootstrap.kubeconfig 中的用户 Token 来向 apiserver 声明自己的 RBAC 授权身份

--tls-cert-file=/opt/kubernetes/ssl/server.pem 指定kube-apiserver证书地址

--tls-private-key-file=/opt/kubernetes/ssl/server-key.pem 指定kube-apiserver私钥地址

--client-ca-file=/opt/kubernetes/ssl/ca.pem 指定根证书地址

--service-account-key-file=/opt/kubernetes/ssl/ca-key.pem 包含PEM-encoded x509 RSA公钥和私钥的文件路径,用于验证Service Account的token,如果不指定,则使用--tls-private-key-file指定的文件

--etcd-cafile=/opt/etcd/ssl/ca.pem 到etcd安全连接使用的SSL CA文件

--etcd-certfile=/opt/etcd/ssl/server.pem 到etcd安全连接使用的SSL 证书文件

--etcd-keyfile=/opt/etcd/ssl/server-key.pem 到etcd安全连接使用的SSL 私钥文件

七、kube-controller-manager

kubelet 发起的 CSR 请求都是由 kube-controller-manager 来做实际签署的,所有使用的证书都是根证书的密钥对 。由于kube-controller-manager是和kube-apiserver部署在同一节点上,且使用非安全端口通信,故不需要证书

使用的证书证书作用
ca.pemCA根证书
ca-key.pemkube-apiserver的tls认证私钥
--cluster-signing-cert-file=/opt/kubernetes/ssl/ca.pem 指定签名的CA机构根证书,用来签名为 TLS BootStrap 创建的证书和私钥

--cluster-signing-key-file=/opt/kubernetes/ssl/ca-key.pem 指定签名的CA机构私钥,用来签名为 TLS BootStrap 创建的证书和私钥

--service-account-private-key-file=/opt/kubernetes/ssl/ca-key.pem 同上

--root-ca-file=/opt/kubernetes/ssl/ca.pem 根CA证书文件路径 ,用来对 kube-apiserver 证书进行校验,指定该参数后,才会在Pod 容器的 ServiceAccount 中放置该 CA 证书文件 

--kubeconfig kubeconfig配置文件路径,在配置文件中包括Master的地址信息及必要认证信息

八、kube-scheduler && kube-proxy

kube-scheduler是和kube-apiserver一般部署在同一节点上,且使用非安全端口通信,故启动参参数中没有指定证书的参数可选 。 若分离部署,可在kubeconfig文件中指定证书,使用kubeconfig认证,kube-proxy类似

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐