KubeEdge 集群新增接入 IP (VIP) 实战指南

作者:Administrator 发布时间: 2025-11-29 阅读量:2 评论数:0

场景描述: 现有的 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)

  1. Secret 命名陷阱

    • Helm 部署通常创建名为 cloudcore 的 Secret。

    • 但 KubeEdge 源码内部硬编码读取名为 cloudcoresecret 的 Secret。

    • 解决:必须删除 cloudcoresecret 才能触发证书重新生成。

  2. CA 证书问题

    • 如果上述操作后 Edge 端报 unknown authority,说明 CloudCore 重启时生成了全新的 CA(因为找不到旧的 CA 私钥)。

    • 解决:需要将云端新生成的 ca.crt (在 Secret casecret 中) 复制到所有 Edge 节点的 /etc/kubeedge/ca/rootCA.crt

    • 注:如果 Secret casecret 未被删除且保留了旧 CA,通常不需要执行此步。

评论