Kubeadm搭建的GCE Kubernetes集群无法通过Ingress实现外部IP域名映射
根因说明
你部署的裸金属版本Nginx Ingress Controller默认未绑定GCE节点的公网IP,导致Ingress资源只能获取到集群内部IP,外部流量无法通过域名路由到Ingress Controller。
解决方案
方案1:手动配置Ingress Controller绑定公网IP
执行命令编辑Ingress Controller的Service配置:kubectl edit svc ingress-nginx-controller -n ingress-nginx在
spec字段下添加你的GCE节点公网IP作为外部IP,示例配置:spec: externalIPs: - 你的GCE节点公网IP保存修改后等待约1分钟,执行
kubectl get ingress my-ingress即可看到ADDRESS列显示你配置的公网IP。方案2:通过NodePort临时验证连通性
裸金属版本的Ingress Controller默认会为80、443端口映射NodePort,执行以下命令查询对应的端口:kubectl get svc ingress-nginx-controller -n ingress-nginx直接访问
http://sample.com:<80端口对应的NodePort>或https://sample.com:<443端口对应的NodePort>即可验证Ingress规则是否生效。方案3:适配GCE云环境自动分配公网IP
给集群配置GCE Cloud Provider支持后,将Ingress Controller的Service类型改为LoadBalancer,GCE会自动为你分配公网负载均衡IP,Ingress资源会自动绑定该公网IP,无需手动配置。
验证排查步骤
- 配置完成后确认
kubectl get ingress my-ingress的ADDRESS列已显示公网IP - 本地执行
curl -H "Host: sample.com" http://<公网IP>,确认返回应用的正常响应 - 确认GCE防火墙规则已开放80、443端口的入站访问权限
内容的提问来源于stack exchange,提问作者farmillion123
相关产品推荐
相关产品推荐

