作者介绍:简历上没有一个精通的运维工程师。请点击上方的蓝色《运维小路》关注我,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。
我们上一章介绍了Docker基本情况,目前在规模较大的容器集群基本都是Kubernetes,但是Kubernetes涉及的东西和概念确实是太多了,而且随着版本迭代功能在还增加,笔者有些功能也确实没用过,所以只能按照我自己的理解来讲解。
当我第一次部署Kubernnetes是在2017年,当时使用的部署方式是yum安装的,当时的版本是1.5.2。部署出来以后kube-apiserver默认端口是8080,走的http协议,目前的kubectl命令在没有配置/root/.kube/config文件情况下,默认走也是http的8080端口。
目前的版本默认走的都是6443的https协议,而且这个和我们常见的https协议不一样,普通的https协议是服务端配置证书,客户端不需要做任何配置。但是在Kubernetes里面这里的https走的是双向证书,简单来说就是客户端也必须带上自己证书,并且这个证书还是有权限控制的,然后才能请求服务端。
所以本小节来讲讲Kubernetes的证书。
这个图片里面的箭头在Kubernetes内部,都是双向证书,下面的内容来源于我多年前的一篇文章,本次编写进行了略为修改。
CA证书
简单来说就是证书的颁发机构,也可以叫根证书。本身也是一个证书,并不会直接提供服务。当然他也是有有效期的,这个证书默认是10年。
路径 | 解释 | 年限 |
---|---|---|
/etc/kubernetes/pki/etcd/ca.crt | etcd根证书 | 默认10年 |
/etc/kubernetes/pki/ca.crt | k8s集群根证书 | 默认10年 |
/etc/kubernetes/pki/front-proxy-ca.crt | 代理访问k8s根证书(较少使用) | 默认10年 |
普通证书
就是由CA证书颁发的普通证书,直接应用于业务的,他也有有效期的,比如10年,当然他的有效期还受CA的影响,如果颁发CA证书过期,即便他自己没过期,证书也是会失效。默认是1年。
etcd证书
ca.crt作为etcd的根证书,签发etcd对外提供服务的server证书和签发etcd节点之间同步使用的peer证书,kubelet向etcd发起健康检查的证书。但是查看etcd静态pod的yaml文件发现健康检查走的http协议,所以这个健康检查证书是没有被使用的。
livenessProbe:
failureThreshold: 8
httpGet:
host: 127.0.0.1
path: /health
port: 2381
scheme: HTTP
initialDelaySeconds: 10
periodSeconds: 10
timeoutSeconds: 15
配置 | 文件 | 解释 | 签发关系 |
---|---|---|---|
--cert-file | /etc/kubernetes/pki/etcd/server.crt | 对外提供服务的服务器证书 | 被ca.crt签发 |
--trusted-ca-file | /etc/kubernetes/pki/etcd/ca.crt | 用于验证访问 etcd 服务器的客户端证书的 CA 根证书 | 签发server和peer证书 |
--peer-cert-file | /etc/kubernetes/pki/etcd/peer.crt | 节点之间相互通信的证书 | 被ca.crt签发 |
--peer-trusted-ca-file | /etc/kubernetes/pki/etcd/ca.crt | 用于验证 peer 证书的 CA 根证书 | 签发peer.crt |
/etc/kubernetes/pki/etcd/healthcheck-client.crt | 用于kubelet向etcd发起健康检查的证书 | 被ca.crt签发 |
Kube-apiserver证书(作为客户端)
在Kubernetes集群里面,etcd的唯一访问者就是kube-apiserver,前面提到etcd对外提供服务使用的证书服务,那么kube-apiserver访问etcd必然也是带证书的。
配置 | 文件 | 解释 | 签发关系 |
---|---|---|---|
--etcd-cafile | /etc/kubernetes/pki/etcd/ca.crt | 用于验证kube-apiserver向etcd请求证书的CA根证书 | 签发apiserver-etcd-client.crt |
--etcd-certfile | /etc/kubernetes/pki/apiserver-etcd-client.crt | 用于kube-apiserver向etcd请求的客户端证书 | 被etcd的ca.crt签发 |
kube-apiserver证书(作为服务端)
Kube-apiserver不仅作为客户端连接etcd,更重要的是它作为集群的入口,面向集群的其他组件和kubectl命令提供服务,那么它涉及到的证书会更多。
配置 | 文件 | 解释 | 签发关系 |
---|---|---|---|
--client-ca-file | /etc/kubernetes/pki/ca.crt | 集群CA根证书 | 签发apiserver.crt |
--tls-cert-file | /etc/kubernetes/pki/apiserver.crt | 对外提供服务的的服务器证书 | 被ca.crt签发 |
--kubelet-client-certificate | /etc/kubernetes/pki/apiserver-kubelet-client.crt | 用于kube-apiserver访问kubelet的证书 | 被ca.crt签发 |
--proxy-client-cert-file | /etc/kubernetes/pki/front-proxy-client.crt | kube-proxy启用代理以后,我们通过请求代理端口,代理请求kube-apiserver所需要的证书 | 被front-proxy-ca.crt签发 |
--requestheader-client-ca-file | /etc/kubernetes/pki/front-proxy-ca.crt | 签发代理证书 | 签发front-proxy-client.crt |
--service-account-key-file | /etc/kubernetes/pki/sa.pub | 服务账号(Service Account)公钥文件,等同于ssh免密登录放置在被登录服务器的公钥)kube-proxy ,flannel,coreDNS等用此方式和apiserver进行通信,后面会单独讲。 | |
--token-auth-file | /etc/kubernetes/known_tokens.csv | 旧版本有,当前版本没有这个配置 |
kube-scheduler证书
配置 | 文件 | 解释 | 签发关系 |
---|---|---|---|
certificate-authority-data | /etc/kubernetes/scheduler.conf | 集群CA根证书,通过base64加密以后存储到配置文件里面。 | 签发client-certificate-data |
client-certificate-data | /etc/kubernetes/scheduler.conf | 作为客户端请求kube-apiserver的证书。 | 被certificate-authority-data签发 |
kube-controller-manager证书
配置 | 文件 | 解释 | 签发关系 |
---|---|---|---|
certificate-authority-data | /etc/kubernetes/controller-manager.conf | 集群CA根证书,通过base64加密以后存储到配置文件里面 | 签发client-certificate-data |
client-certificate-data | /etc/kubernetes/controller-manager.conf | 作为客户端请求kube-apiserver的证书 | 被certificate-authority-data签发 |
kubelet证书
配置 | 文件 | 解释 | 签发关系 |
---|---|---|---|
certificate-authority-data | /etc/kubernetes/kubelet.conf | 集群CA根证书,通过base64加密以后存储到配置文件里面 | 签发client-certificate-data |
client-certificate | /var/lib/kubelet/pki/kubelet-client-current.pem | 作为客户端请求kube-apiserver的证书 | 被certificate-authority-data签发 |
kubectl证书
配置 | 文件 | 解释 | 签发关系 |
---|---|---|---|
certificate-authority-data | /etc/kubernetes/admin.conf /root/.kube/config |
集群CA根证书,通过base64加密以后存储到配置文件里面 | 签发client-certificate-data |
client-certificate-data | /etc/kubernetes/admin.conf /root/.kube/config |
作为客户端请求kube-apiserver的证书 | 被certificate-authority-data签发 |
运维小路
一个不会开发的运维!一个要学开发的运维!一个学不会开发的运维!欢迎大家骚扰的运维!
关注微信公众号《运维小路》获取更多内容。