Kubernetes证书签名请求(CSR)API详解
2025-07-05 00:56:49作者:房伟宁
概述
Kubernetes中的CertificateSigningRequest(CSR)API提供了一种机制,允许用户提交证书签名请求,并异步获取批准和颁发的x509证书。这个API在Kubernetes集群的安全通信中扮演着关键角色。
CSR的主要用途
- kubelet客户端证书:用于kubelet向kube-apiserver进行身份验证(使用"kubernetes.io/kube-apiserver-client-kubelet"签名者名称)
- 服务证书:为kube-apiserver可以安全连接的TLS端点提供服务证书(使用"kubernetes.io/kubelet-serving"签名者名称)
- 自定义签名者:也可以用于请求客户端证书来验证kube-apiserver,或从自定义的非Kubernetes签名者获取证书
CSR核心组件
1. CertificateSigningRequest对象
这是CSR API的核心对象,包含以下主要字段:
apiVersion
和kind
:标准的Kubernetes资源标识metadata
:包含对象的元数据spec
:包含证书请求的具体规范,创建后不可变status
:包含请求是否被批准或拒绝的信息,以及签名者颁发的证书
2. CertificateSigningRequestSpec
这是证书请求的具体规范,包含以下重要字段:
request
:包含x509证书签名请求,以PEM格式编码signerName
:请求的签名者名称,限定名称expirationSeconds
:请求的证书有效期(秒)usages
:请求的密钥用途集合username
、uid
、groups
和extra
:关于请求创建者的信息
3. CertificateSigningRequestStatus
表示CSR的状态,包含:
certificate
:签名者在批准条件存在后颁发的证书conditions
:应用于请求的条件,包括"Approved"、"Denied"和"Failed"
签名者类型
Kubernetes支持几种已知的签名者:
- kubernetes.io/kube-apiserver-client:颁发用于向kube-apiserver进行身份验证的客户端证书
- kubernetes.io/kube-apiserver-client-kubelet:颁发kubelet用于向kube-apiserver进行身份验证的客户端证书
- kubernetes.io/kubelet-serving:颁发kubelet用于服务TLS端点的服务证书
使用场景示例
创建CSR请求
apiVersion: certificates.k8s.io/v1
kind: CertificateSigningRequest
metadata:
name: my-csr
spec:
request: <base64-encoded-certificate-request>
signerName: kubernetes.io/kube-apiserver-client
usages:
- client auth
批准CSR请求
管理员可以批准或拒绝CSR请求。批准后,系统会自动填充status.certificate字段。
最佳实践
- 最小权限原则:只请求必要的证书权限
- 合理设置有效期:根据安全策略设置适当的expirationSeconds
- 监控CSR状态:定期检查CSR的conditions以确保证书颁发过程正常
- 定期轮换证书:建立证书轮换机制以增强安全性
总结
Kubernetes的CSR API为集群内外的安全通信提供了灵活的证书管理机制。通过理解其工作原理和最佳实践,管理员可以有效地管理集群中的证书生命周期,确保通信安全。