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

为K3s/Kubernetes集群TLS证书添加额外浮动IP以解决kubectl SSL连接验证失败问题

K3s/Kubernetes集群TLS证书添加额外浮动IP以解决kubectl SSL连接验证失败问题

我完全懂你遇到的困扰——用Keepalived给K3s集群配了浮动IP,但kubectl连这个IP时一直报TLS证书验证失败,本质就是集群API Server的证书里没把这个浮动IP加进去。别担心,咱们一步步搞定它:

解决步骤

1. 先备份证书(重中之重!)

操作前先把现有证书目录备份一份,防止失误搞崩集群:

cp -r /var/lib/rancher/k3s/server/tls /var/lib/rancher/k3s/server/tls.bak

提示:所有control-plane节点都要执行这个备份操作哦

2. 把浮动IP加入证书的SAN列表

K3s自带--tls-san参数,专门用来给证书添加额外的IP或域名(也就是Subject Alternative Names),咱们把浮动IP加进去就行,根据你的K3s启动方式选对应的配置方法:

方式一:修改systemd服务配置(如果用systemd管理K3s)

编辑K3s的systemd服务文件:

vi /etc/systemd/system/k3s.service

找到ExecStart那一行,在末尾追加--tls-san 192.168.2.80,修改后大概是这样:

ExecStart=/usr/local/bin/k3s server \
    --tls-san 192.168.2.80 \
    # 这里保留你原来的其他参数

保存退出后,重载systemd并重启K3s:

systemctl daemon-reload
systemctl restart k3s

方式二:用K3s配置文件(更持久的方式)

如果你的K3s是通过配置文件启动的(默认路径/etc/rancher/k3s/config.yaml),直接在文件里加一行:

tls-san: 192.168.2.80

然后重启K3s服务:

systemctl restart k3s

注意:所有control-plane节点都要做这个配置修改和重启,因为Keepalived可能把浮动IP切到任意节点,每个节点的API Server证书都得包含这个IP

3. 更新kubectl的配置

把kubectl指向的集群地址改成浮动IP:

kubectl config set-cluster default --server=https://192.168.2.80:6443

或者直接编辑你的kubeconfig文件(一般在~/.kube/config),找到clusters下的server字段,替换成浮动IP就行。

4. 验证连接是否正常

现在跑个命令测试下:

kubectl get nodes

要是能正常返回节点列表,那问题就彻底解决啦!

额外小提示

  • 如果你的浮动IP是域名而非IP,同样可以用--tls-san参数添加,比如--tls-san k8s.mycluster.com
  • 重启K3s后会自动重新生成包含浮动IP的证书,不用手动折腾证书生成
  • 后续加新的control-plane节点时,记得给新节点也加上这个--tls-san配置

备注:内容来源于stack exchange,提问作者Marc

火山引擎 最新活动