场景描述: 现有的 KubeEdge 集群使用物理 IP 接入,现在引入了 Keepalived VIP (192.168.6.222) 以实现高可用。需要让 CloudCore 签发包含该 VIP 的证书,并让 Edge 节点通过该 VIP 接入。
核心原理: CloudCore 的证书生成逻辑依赖于 ConfigMap 中的配置。但若 Secret 中已存在旧证书,CloudCore 会优先读取旧证书而忽略配置变更。因此,必须修改配置并删除旧 Secret,强制触发证书重签。
第一阶段:云端 (CloudCore) 配置
1. 修改 ConfigMap (添加 VIP)
首先告知 CloudCore 需要支持的新 IP。
kubectl edit cm cloudcore -n kubeedge
在 modules.cloudHub.advertiseAddress 列表中添加 VIP:
modules:
cloudHub:
advertiseAddress:
- 192.168.6.102 # 原物理 IP
- 192.168.6.222 # 【新增】VIP
2. 备份现有 Secret (运维黄金法则)
在执行删除操作前,务必备份。KubeEdge 代码中使用的 Secret 名称 (cloudcoresecret) 和 Helm 部署挂载的名称 (cloudcore) 可能不一致,建议全部备份。
# 备份代码逻辑核心 Secret
kubectl get secret cloudcoresecret -n kubeedge -o yaml > cloudcoresecret.bak.yaml
# 备份 Pod 挂载的 Secret
kubectl get secret cloudcore -n kubeedge -o yaml > cloudcore.bak.yaml
3. 删除旧 Secret (关键步骤)
这是最容易踩坑的地方。源码(cloud/pkg/cloudhub/httpserver)显示 CloudCore 启动时会检查 cloudcoresecret。如果不删除它,生成逻辑会被跳过。
# 删除内部逻辑使用的 Secret,触发重新生成
kubectl delete secret cloudcoresecret -n kubeedge
# 删除挂载用的 Secret (视具体部署情况,建议一并删除以防混淆)
kubectl delete secret cloudcore -n kubeedge
4. 重启 CloudCore Pod
删除 Secret 后,重启 Pod 会触发初始化逻辑:读取 ConfigMap -> 发现 Secret 不存在 -> 重新签发带 VIP 的证书 -> 创建新 Secret。
kubectl delete pod -n kubeedge -l kubeedge=cloudcore
5. 验证新证书
等待 Pod 状态变为 Running 后,检查新生成的 Secret 中是否包含 VIP。
# 查看 cloudcoresecret 中的证书详情
kubectl get secret cloudcoresecret -n kubeedge -o jsonpath='{.data.cloudcoredata}' | base64 -d | openssl x509 -text -noout | grep -A 2 "Subject Alternative Name"
成功标志: 输出中必须包含 IP Address: 192.168.6.222。
X509v3 Subject Alternative Name:
DNS:cloudcore.kubeedge, IP Address:192.168.6.102, IP Address:192.168.6.222
第二阶段:边缘端 (EdgeCore) 配置
云端证书就绪后,就可以切换边缘节点的连接地址了。
1. 修改 EdgeCore 配置
登录到 Edge 节点,编辑配置文件:
vim /etc/kubeedge/config/edgecore.yaml
修改 modules.edgeHub.websocket.server 指向 VIP:
modules:
edgeHub:
websocket:
enable: true
# 修改为 VIP 地址
server: 192.168.6.222:10000
2. 重启 EdgeCore
systemctl restart edgecore
3. 验证连接
查看日志,确认连接成功:
journalctl -u edgecore -f
如果看到 CloudCore 192.168.6.222:10000 connected,即表示切换成功。
⚠️ 避坑总结 (Troubleshooting)
Secret 命名陷阱:
Helm 部署通常创建名为
cloudcore的 Secret。但 KubeEdge 源码内部硬编码读取名为
cloudcoresecret的 Secret。解决:必须删除
cloudcoresecret才能触发证书重新生成。
CA 证书问题:
如果上述操作后 Edge 端报
unknown authority,说明 CloudCore 重启时生成了全新的 CA(因为找不到旧的 CA 私钥)。解决:需要将云端新生成的
ca.crt(在 Secretcasecret中) 复制到所有 Edge 节点的/etc/kubeedge/ca/rootCA.crt。注:如果 Secret
casecret未被删除且保留了旧 CA,通常不需要执行此步。