非云K8s集群下为Ingress Controller配置静态外部IP的可行性咨询
可行性结论
该方案完全可行,K8s原生支持Service配置externalIPs字段对外暴露服务,只要你准备使用的静态IP满足以下两个前提即可:
- 该IP对应的二级网卡所在节点和集群所有工作节点网络连通
- 该静态IP未被局域网内其他设备占用
具体操作步骤
你可以直接修改已经部署的Nginx Ingress Controller的Service配置完成设置:
- 执行命令编辑Service资源,替换命令中的命名空间和服务名为你实际环境的对应值:
kubectl edit svc nginx-ingress-controller -n ingress-nginx - 在
spec配置块下新增externalIPs配置,替换为你准备使用的静态IP:
spec: # 保留其他原有配置不变,新增以下两行 externalIPs: - 192.168.xx.xx # 替换为你的二级网卡静态IP
- 保存退出编辑后,等待10秒左右执行
kubectl get svc -n ingress-nginx,就可以看到Nginx Controller的EXTERNAL-IP字段已经显示为你配置的静态IP,直接通过该IP即可访问集群内的Ingress服务。
如果你是通过Helm安装的Nginx Ingress Controller,也可以在升级时直接通过参数指定:helm upgrade ingress-nginx ingress-nginx/ingress-nginx -n ingress-nginx --set controller.service.externalIPs={192.168.xx.xx}
注意事项
- 确认局域网内需要访问Ingress的客户端都可以路由到该静态IP,否则会出现无法访问的问题
- 如果该IP对应的节点下线或者网卡故障,需要手动更新
externalIPs配置替换为其他可用IP,避免服务中断 - 如需提升可用性,可以将多个节点同网段的可用静态IP都加入
externalIPs列表,访问时任意一个IP都可以正常转发流量
内容的提问来源于stack exchange,提问作者Vijayendar Gururaja
相关产品推荐
相关产品推荐

