在 Kubernetes 集群中,证书是用来加密通讯和验证身份的重要组件。证书的管理不仅是集群安全的一部分,也是部署流程中必须的环节。本文将介绍 Kubernetes 集群中的证书管理细节,包括证书相关的操作和示例代码。
证书
证书由公钥和私钥共同组成。公钥被放在证书中,私钥则由证书所属的主体持有。集群中,一个证书管理许多相关的私钥和公钥。
Certification Authority(CA)
在 Kubernetes 集群中会有一个 CA(CA=Certification Authority,证书颁发机构)。CA 颁发的证书是集群中所有组件进行 https 通讯时所使用的密钥对的公钥。
Server Certificate
Server Certificate 是通过 CA 颁发的服务器证书,它包含了用于验证服务端身份的公钥。该证书在 Kubernetes 中用于加密内部组件间的通讯,如 etcd,kube-apiserver。
Client Certificate
Client Certificate 用于验证客户端身份,通常作为一种身份验证的手段。在 Kubernetes 中,client certificate 主要用于 kubectl 命令向 kube-apiserver 发起的请求鉴权。
证书的生命周期
证书的生命周期包含发放、存储和失效。通常证书的生命周期取决于应用或公司的策略,并受到各种审计和合规要求的监管。
发放
CA 会向某个实体签发证书。这通常涉及到验证申请者的身份和所有权。这个过程生成了私钥和公钥,私钥由证书持有者保管,公钥插入证书。
存储
证书存在于 Kubernetes 集群的 etcd 存储中,并且必须加密存储以确保安全。
失效
证书需要定期失效或者在某些情况下被立刻注销,比如涉及到证书泄露或自然失效。在 Kubernetes 集群中,证书的失效通常有以下手段:
- 定期失效:通过设置证书的过期时间来定期失效。
- Revocation:在不确定客户端证书是否有效的情况下,可以注销证书。TBD: Revocation 是通过 OCSP 实现的。Kubernetes 的证书管理不支持 OCSP,需要集成外部的 OCSP 适配器。
Kubernetes 中的证书管理
Kubernetes 中的证书管理由 kube-apiserver 组件自动完成。Kubernetes Certificate Signing Request (CSR) API 对象持有证书请求并在申请者获得集群管理员的审批后,由CA颁发实际的证书。
Certificates API
证书 API 定义了在 Kubernetes 中管理证书的规范。其中包括以下对象:
- CertificateSigningRequest
- CertificateSigningRequestList
- CertificateSigningRequestSpec
- CertificateSigningRequestStatus
其中,CertificateSigningRequestSpec 描述了证书请求的详细信息,例如证书类型,请求中的主体信息,请求的有效时间等等。CertificateSigningRequestStatus 则记录了证书请求的当前状态,以及证书的颁发、拒绝或暂停颁发等信息。
certificates.k8s.io 群组下的 CSR API 可能需要扩展支持特定的证书请求场景和证书属性,但是这个 API 是必要的,因为它可以作为 Kubernetes 以外的工具中与 Kubernetes 进行证书通信的标准。
如果需要更精细的证书管理,可以考虑使用 Kubernetes 中的证书管理工具(Cipher,cert-manager等),或自己实现。
示例
以下是一个使用 Kubernetes Certificate Signing Requests API 发起证书请求的例子。
-- -------------------- ---- ------- ----------- --------------------------- ----- ------------------------- --------- ----- ----- ----- ------- - -------------------- -------- ----------- ----------- ----------------------------------- ------- - ------- --------- - --- ------------ - ------ ----
其中,request
字段是通过 openssl req -out CSR_FILENAME
命令生成的:
echo -n bar | openssl req -new -key ~/.minikube/ca.crt -subj "/CN=myuser/O=mygroup" -nodes -out myuser-csr.pem
结论
证书管理是 Kubernetes 集群中必须的一部分。Kubernetes 提供了 CertificateSigningRequest API 对象,用于定义证书请求和证书的生命周期。对于企业应用,通常需要根据不同的策略和合规要求来定义证书的过期和管理方案。Kubernetes 中的证书管理工具可以帮助用户管理证书。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/671b55359babaf620faac7c2