1. 证书生成与颁发
1.1 选择合适的工具
在Kubernetes(K8s)集群中,证书生成通常使用OpenSSL或cfssl等工具。OpenSSL是功能强大的开源工具,而cfssl提供了一套完整的命令行工具,方便证书的生成和签名。
1.2 生成证书内容
证书生成包括公钥和私钥,私钥必须严格保密,仅限可信人员访问。以下是一个使用OpenSSL生成证书的示例代码:
openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365
1.3 证书颁发
证书颁发通常由证书颁发机构(CA)进行。可以选择自签名CA或第三方CA进行证书签发。
cfssl gencert -initca ca-csr.json cfssljson -bare ca
2. 证书存储与访问控制
2.1 证书存储
证书通常存储在节点上的特定目录,如/var/lib/kubelet/pki/
。确保遵循命名规范,方便管理和查找。
2.2 访问控制
确保只有授权的用户和进程可以访问证书和密钥。可以使用Kubernetes的Secrets或ConfigMap来存储证书和密钥。
apiVersion: v1
kind: Config
clusters:
- cluster:
certificate-authority: /var/lib/kubelet/pki/ca.pem
server: https://kubernetes.default.svc
users:
- name: kubelet
user:
token: <token>
context:
cluster: kubernetes
user: kubelet
current-context: kubernetes
3. 证书分发
3.1 使用Kubernetes Secrets
将证书和密钥存储在Kubernetes Secrets中,并通过卷挂载或环境变量的方式传递给需要使用证书的Pod。
apiVersion: v1
kind: Secret
metadata:
name: my-secret
type: kubernetes.io/token
data:
token: <base64-encoded-token>
3.2 使用ConfigMap
将证书和密钥存储在ConfigMap中,适用于不需要直接访问证书和密钥的场景。
apiVersion: v1
kind: ConfigMap
metadata:
name: my-configmap
data:
ca.crt: |
<base64-encoded-ca-certificate>
server.crt: |
<base64-encoded-server-certificate>
server.key: |
<base64-encoded-server-key>
4. 证书续期
4.1 自动续期
使用如Cert-Manager等工具实现证书的自动续期,确保证书始终有效。
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: my-certificate
spec:
secretName: my-secret
issuerRef:
name: my-issuer
kind: Issuer
5. 证书撤销
5.1 吊销证书
当发现证书被泄露或被非法使用时,应及时吊销证书,并更新集群中的证书存储。
cfsslctl revoke -ca ca.pem -cert my-certificate.pem -key ca.key
通过以上五大关键步骤,可以有效管理K8s集群中的证书,保障集群的安全稳定运行。