【每日一个云原生小技巧 #46】K8s 手动生成证书

2023-12-19 19:18:13 浏览数 (1)

在 Kubernetes (K8s) 环境中,手动生成证书是一种重要的操作,特别是在需要对集群进行更细致的安全控制或不使用自动化工具如 kubeadm 时。

使用场景

  1. 增强安全性:手动生成证书可以让管理员更好地控制密钥的存储和管理,增强集群的安全性。
  2. 定制化需求:在特定情况下,可能需要为特定服务或节点生成特殊配置的证书。
  3. 教育和测试:学习和测试 Kubernetes 安全性配置时,手动创建和管理证书可以提供更深入的理解。

使用技巧

  1. 使用工具:可以通过工具如 easyrsa、openssl 或 cfssl 手动生成证书。
  2. 创建 CA(证书颁发机构):首先需要创建一个 CA,它将用于签署集群中其他证书。
  3. 证书存储位置:如果使用 kubeadm 安装 Kubernetes,大多数证书存储在 /etc/kubernetes/pki 目录中。
  4. 证书旋转:定期更新或“旋转”证书,以保持安全性和有效性。

使用案例

使用 EasyRSA 生成证书

初始化

代码语言:javascript复制
curl -LO https://dl.k8s.io/easy-rsa/easy-rsa.tar.gz
tar xzf easy-rsa.tar.gz
cd easy-rsa-master/easyrsa3
./easyrsa init-pki

生成 CA 和服务器证书

代码语言:javascript复制
./easyrsa --batch "--req-cn=${MASTER_IP}@`date  %s`" build-ca nopass
./easyrsa --subject-alt-name="IP:${MASTER_IP},..." --days=10000 build-server-full server nopass

配置 API 服务器:使用生成的证书配置 Kubernetes API 服务器。

使用 OpenSSL 生成证书

生成 CA

代码语言:javascript复制
openssl genrsa -out ca.key 2048
openssl req -x509 -new -nodes -key ca.key -subj "/CN=${MASTER_IP}" -days 10000 -out ca.crt

生成服务器证书

代码语言:javascript复制
openssl genrsa -out server.key 2048

创建 CSR 配置文件:根据实际情况填写配置文件,然后生成服务器证书。

证书轮换

  1. 备份:在进行任何操作前备份所有证书和配置文件。
  2. 分发新证书:将新的 CA 证书和私钥分发到所有控制平面节点。
  3. 更新配置:更新 kube-controller-manager--root-ca-file 标志,包括新旧 CA。

注意事项

  • 确保在生成和使用证书时正确配置所有相关参数,以保证集群的正常运作。
  • 在进行证书旋转时,特别是在高可用性配置中,需要特别注意更新和重启服务的顺序。

通过手动管理 Kubernetes 证书,可以获得对安全性更高的控制,尽管这可能需要更多的管理工作。更多详细信息和指南,请参考 Kubernetes 官方文档:手动生成证书[1]PKI 证书和需求[2]手动轮换 CA 证书[3]

参考资料

[1]

手动生成证书: https://kubernetes.io/docs/tasks/administer-cluster/certificates/

[2]

PKI 证书和需求: https://kubernetes.io/docs/setup/best-practices/certificates/

[3]

手动轮换 CA 证书: https://kubernetes.io/docs/tasks/tls/manual-rotation-of-ca-certificates/

0 人点赞