You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

CentOS7下用kubeadm部署K8s时,如何生成5年期kube-apiserver证书?

嘿,我刚好碰到过这个问题!kubeadm默认生成的1年期kube-apiserver证书确实太折腾人了,你之前单独用openssl genrsa没奏效是因为没踩对kubeadm的路子——它有自己完整的证书生成体系,得通过配置文件来指定有效期才行。下面是部署阶段直接生成5年有效期证书的靠谱方法:

方法一:通过kubeadm配置文件自定义证书有效期

这是kubeadm官方推荐的方式,能在集群初始化阶段直接生成符合要求的证书,还能顺便指定你需要的TLS加密套件。

1. 导出kubeadm默认配置模板

先把kubeadm的默认配置导出来,方便我们修改:

kubeadm config print init-defaults > kubeadm-config.yaml

2. 修改配置文件,设置证书有效期和加密套件

打开kubeadm-config.yaml,按照下面的方式修改:

  • 如果你只想单独设置kube-apiserver的证书有效期,就在apiServer节点下添加certificateValidity字段(值设为1825天,刚好5年),同时指定TLS加密套件:
apiServer:
  certSANs:
  - "kube-apiserver"
  - "localhost"
  - "127.0.0.1"
  # 这里可以添加你的集群域名、API Server的公网/内网IP
  extraArgs:
    tls-cipher-suites: TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256
  certificateValidity: 1825  # 5年 = 365*5 = 1825天
  • 要是想给所有集群证书(比如kube-controller-manager、kube-scheduler等)都设置5年有效期,可以在配置文件的顶层ClusterConfiguration节点下添加全局的certificateValidity
apiVersion: kubeadm.k8s.io/v1beta3
kind: ClusterConfiguration
kubernetesVersion: v1.28.0  # 替换成你要部署的K8s版本
certificateValidity: 1825  # 全局设置所有证书有效期为5年
apiServer:
  certSANs:
  - "kube-apiserver"
  extraArgs:
    tls-cipher-suites: TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256

3. 用自定义配置初始化集群

修改完配置文件后,用它来执行kubeadm初始化命令:

kubeadm init --config=kubeadm-config.yaml

这样kubeadm就会严格按照你指定的参数生成证书,包括5年有效期和要求的TLS加密套件。

为什么单独用openssl生成没用?

kubeadm在部署时会自动构建一套完整的证书信任链(由它自己生成的kubernetes CA签名所有组件证书),你单独用openssl生成的证书不在这个信任链里,kube-apiserver和其他组件(比如kubelet、kube-controller-manager)之间会因为证书不被信任而无法正常通信,自然就没用啦。

验证证书是否生效

集群初始化完成后,你可以用这条命令查看kube-apiserver证书的有效期:

openssl x509 -in /etc/kubernetes/pki/apiserver.crt -text -noout | grep -A2 "Validity"

输出里的起始日期和过期日期应该刚好间隔5年,就说明配置生效了。

内容的提问来源于stack exchange,提问作者sfgroups

火山引擎 最新活动