You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kops部署的AWS Kubernetes集群更换Server URL后kubectl证书问题解决

解决kops部署Kubernetes集群更换Server URL后的证书验证问题

这个问题的核心是Kubernetes API Server的TLS证书不包含你的新域名——证书里的SAN(Subject Alternative Names)列表只包含旧域名和集群内部域名,所以用新域名访问时会触发x509验证失败。用kops可以很平滑地更新证书,而且最小化对集群的影响,不需要重建整个集群。

以下是具体操作步骤:

1. 更新kops集群配置,添加新域名到API Server证书SAN

首先需要修改集群的kops配置,把新域名加入API Server的证书允许列表:

kops edit cluster <你的集群名称> --state <你的state存储路径,比如s3://my-kops-state>

在打开的YAML编辑器中,找到spec.kubeAPIServer节点(如果没有就新增),添加或更新certSANs字段,同时保留旧域名和原有内部域名(避免中断现有访问):

spec:
  kubeAPIServer:
    certSANs:
    - old-server-url.com
    - internal.old-server-url.com
    - new-server-url.com
    - kubernetes
    - kubernetes.default
    - kubernetes.default.svc
    - kubernetes.default.svc.cluster.local

保存并退出编辑器。

2. 应用配置更新并生成新证书

执行kops更新命令,让配置生效并生成包含新域名的API Server证书:

kops update cluster <你的集群名称> --state <你的state存储路径> --yes

这个命令会对比当前集群状态和修改后的配置,自动生成新的API Server证书并存储到你的state存储中。

3. 滚动重启Master节点,让新证书生效

为了让新证书被API Server加载,需要滚动重启Master节点(只重启Master,不影响Worker节点,最小化业务影响):

kops rolling-update cluster <你的集群名称> --state <你的state存储路径> --instance-group master --yes

kops会逐个重启Master节点,在重启期间其他Master节点会继续处理请求,所以集群不会出现 downtime。

4. 更新kubeconfig并验证访问

最后,把kubeconfig中的Server URL切换为新域名:

kubectl config set-cluster <你的集群名称> --server=https://new-server-url.com

现在执行kubectl get pods应该就能正常访问集群,不会再出现x509证书错误了。

额外注意事项

  • 暂时不要删除旧域名的SAN条目,直到确认所有客户端(比如CI/CD工具、其他运维脚本)都切换到新域名,避免旧访问方式失效。
  • 可以用以下命令验证新证书是否包含你的新域名:
    openssl s_client -connect new-server-url.com:443 | openssl x509 -noout -text | grep -A 10 "Subject Alternative Name"
    
    输出中应该能看到DNS:new-server-url.com的条目。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 09:04:20