k8s----------各种证书配置参数
目录一、ca.pem & ca-key.pem & ca.csr二、token.csv三、bootstrap.kubeconfig四、kubectl五、kubelet六、kube-apiserver七、kube-controller-manager八、kube-scheduler && kube-proxyetcdflannelmaster&node单节点配
目录
etcd
flannel
master&node
单节点配置k8s的过程各种认证证书,在之前的配置时,相信很多人已经完全给绕晕了。现在整理下各种证书的认证配置
一、ca.pem & ca-key.pem & ca.csr
建立完整TLS加密通信,需要有一个CA认证机构,会向客户端下发根证书、服务端证书以及签名私钥给客户端。ca.pem & ca-key.pem & ca.csr组成了一个自签名的CA机构。
证书名称 | 作用 |
---|---|
ca.pem | CA根证书文件 |
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.pem | CA根证书 |
admin.pem | kubectl的TLS认证证书,具有admin权限 |
admin-key.pem | kubectl的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.pem | CA根证书 |
kubelet-client.crt | kubectl的TLS认证证书 |
kubelet-client.key | kubectl的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.pem | CA根证书 |
ca-key.pem | CA端私钥 |
Server.pem | kube-apiserver的tls认证证书 |
Server-key.pem | kube-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.pem | CA根证书 |
ca-key.pem | kube-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类似
更多推荐
所有评论(0)