加入收藏 | 设为首页 | 会员中心 | 我要投稿 淮安站长网 (https://www.0517zz.cn/)- 运营、云管理、经验、智能边缘、云硬盘!
当前位置: 首页 > 云计算 > 正文

一文带你完全理解 Kubernetes 中的证书工作机制

发布时间:2021-06-07 10:18:43 所属栏目:云计算 来源:互联网
导读:目录 Kubernetes 组件的认证方式 Kubernetes 中使用到的CA和证书 Kubernetes 中的证书配置 etcd 证书配置 kube-apiserver 证书配置 采用 kubeconfig 访问 kube-apiserver Service Account 证书 Kubernetes 证书签发 使用 TLS bootstrapping 简化 Kubelet 证
目录
Kubernetes 组件的认证方式
Kubernetes 中使用到的CA和证书
Kubernetes 中的证书配置
etcd 证书配置
kube-apiserver 证书配置
采用 kubeconfig 访问 kube-apiserver
Service Account 证书
Kubernetes 证书签发
使用 TLS bootstrapping 简化 Kubelet 证书制作
小结
参考文档
Kubernetes 组件的认证方式
首先让我们来看一下 Kubernetes 中的组件:在 Kubernetes 中包含多个以独立进程形式运行的组件,这些组件之间通过 HTTP/GRPC 相互通信,以协同完成集群中应用的部署和管理工作。
 
kubernetes 组件,图片来源kubernetes.io
从图中可以看到,Kubernetes 控制平面中包含了 etctd,kube-api-server,kube-scheduler,kube-controller-manager 等组件,这些组件会相互进行远程调用,例如 kube-api-server 会调用 etcd 接口存储数据,kube-controller-manager 会调用 kube-api-server 接口查询集群中的对象状态;同时,kube-api-server 也会和在工作节点上的 kubelet 和 kube-proxy 进行通信,以在工作节点上部署和管理应用。
以上这些组件之间的相互调用都是通过网络进行的。在进行网络通信时,通信双方需要验证对方的身份,以避免恶意第三方伪造身份窃取信息或者对系统进行攻击。为了相互验证对方的身份,通信双方中的任何一方都需要做下面两件事情:
向对方提供标明自己身份的一个证书
验证对方提供的身份证书是否合法,是否伪造的?
在 Kubernetes 中使用了数字证书来提供身份证明,我们可以把数字证书简单理解为我们在日常生活中使用的“身份证”,上面标注了证书拥有者的身份信息,例如名称,所属组织机构等。为了保证证书的权威性,会采用一个通信双方都信任的 CA(证书机构,Certificate Authority)来颁发证书。这就类似于现实生活中颁发“身份证”的政府机构。数字证书中最重要的内容实际上是证书拥有者的公钥,该公钥代表了用户的身份。本文假设读者已经了解数字证书和 CA 的基本原理,如果你对此不太清楚,或者希望重新温习一下相关知识,可以先阅读一下这篇文章《数字证书原理》(https://zhaohuabing.com/post/2020-03-19-pki)。
 
CA (证书机构),图片来源www.trustauth.cn
在 Kubernetes 的组件之间进行通信时,数字证书的验证是在协议层面通过 TLS 完成的,除了需要在建立通信时提供相关的证书和密钥外,在应用层面并不需要进行特殊处理。采用 TLS 进行验证有两种方式:
服务器单向认证:只需要服务器端提供证书,客户端通过服务器端证书验证服务的身份,但服务器并不验证客户端的身份。这种情况一般适用于对 Internet 开放的服务,例如搜索引擎网站,任何客户端都可以连接到服务器上进行访问,但客户端需要验证服务器的身份,以避免连接到伪造的恶意服务器。
双向 TLS 认证:除了客户端需要验证服务器的证书,服务器也要通过客户端证书验证客户端的身份。这种情况下服务器提供的是敏感信息,只允许特定身份的客户端访问。
在 Kubernetes 中,各个组件提供的接口中包含了集群的内部信息。如果这些接口被非法访问,将影响集群的安全,因此组件之间的通信需要采用双向 TLS 认证。即客户端和服务器端都需要验证对方的身份信息。在两个组件进行双向认证时,会涉及到下面这些证书相关的文件:
服务器端证书:服务器用于证明自身身份的数字证书,里面主要包含了服务器端的公钥以及服务器的身份信息。
服务器端私钥:服务器端证书中包含的公钥所对应的私钥。公钥和私钥是成对使用的,在进行 TLS 验证时,服务器使用该私钥来向客户端证明自己是服务器端证书的拥有者。
客户端证书:客户端用于证明自身身份的数字证书,里面主要包含了客户端的公钥以及客户端的身份信息。
客户端私钥:客户端证书中包含的公钥所对应的私钥,同理,客户端使用该私钥来向服务器端证明自己是客户端证书的拥有者。
服务器端 CA 根证书:签发服务器端证书的 CA 根证书,客户端使用该 CA 根证书来验证服务器端证书的合法性。
客户端端 CA 根证书:签发客户端证书的 CA 根证书,服务器端使用该 CA 根证书来验证客户端证书的合法性。
下面这张来自 《The magic of TLS, X509 and mutual authentication explained》 文章中的图形象地解释了双向 TLS 认证的原理。如果你需要了解更多关于 TLS 认证的原理,可以阅读一下 medium 上的原文(https://medium.com/sitewards/the-magic-of-tls-x509-and-mutual-authentication-explained-b2162dec4401)。

(编辑:淮安站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读