GKE中Traefik Ingress未生成负载均衡器且未分配静态IP咨询
我看你现在遇到的问题是,想让Traefik Ingress Controller在GKE上绑定静态IP,但执行kubectl get ingresses后发现Ingress的ADDRESS字段一直是空的。这其实是因为你混淆了自定义Ingress Controller的暴露逻辑和GKE默认Ingress的工作方式,咱们一步步理清楚:
核心问题分析
当你在Ingress资源里加上kubernetes.io/ingress.class: traefik注解时,GKE的默认GCE Ingress Controller就不会处理这个Ingress资源了——而是由你部署的Traefik Controller来接管。但Traefik本身的入口是通过它的Service暴露的,你现在把这个Service设成了NodePort类型,GKE自然不会为它创建负载均衡器,更没法绑定静态IP。
解决方案步骤
1. 修改Traefik Service为LoadBalancer类型
打开你的traefik-deployment.yml,找到Service部分,把type: NodePort改成type: LoadBalancer,同时添加注解指定你已创建好的静态IP(假设静态IP名称为traefik-static-ip):
kind: Service apiVersion: v1 metadata: name: traefik-ingress-service namespace: kube-system annotations: cloud.google.com/load-balancer-type: "External" # 指定创建外部负载均衡器 networking.gke.io/static-ip: "traefik-static-ip" # 替换成你的静态IP名称 spec: selector: k8s-app: traefik-ingress-lb ports: - protocol: TCP port: 80 name: web - protocol: TCP port: 8080 name: admin type: LoadBalancer
2. 重新部署Traefik资源
执行命令更新Traefik的Service配置:
kubectl apply -f traefik-deployment.yml -n kube-system
3. 验证静态IP绑定状态
等待几分钟让GKE完成负载均衡器创建,然后查看Service状态:
kubectl get service traefik-ingress-service -n kube-system
你会看到EXTERNAL-IP字段显示你指定的静态IP,这就说明负载均衡器已经成功绑定静态IP了。
4. 关于Ingress资源ADDRESS为空的说明
这是正常现象!因为这个Ingress资源是由Traefik Controller管理的,Traefik不会把自身的IP写入Ingress的ADDRESS字段。你可以通过访问Traefik Service的静态IP,加上Ingress里配置的Host头(比如traefik-ui.minikube)来访问Traefik UI——可以用curl -H "Host: traefik-ui.minikube" <你的静态IP>测试,或者把域名映射到这个静态IP后直接访问。
额外补充:如果还没创建静态IP
可以用gcloud命令创建(替换成你的集群区域):
gcloud compute addresses create traefik-static-ip --region asia-east1
然后查看静态IP地址:
gcloud compute addresses describe traefik-static-ip --region asia-east1 --format='value(address)'
内容的提问来源于stack exchange,提问作者Clement

