GKE集群部署Traefik Ingress控制器时Dashboard Ingress报错求助
这个错误的根源很明确:GCP的负载均衡控制器不允许Service中存在端口号为0的配置,而你使用的Traefik 1.6版本的Helm Chart在ssl.enabled: false的情况下,会把websecure端口的数值设为0,这就触发了GCP的校验错误。
为什么会出现这个问题?
当你在values.yaml中设置ssl.enabled: false时,Traefik 1.6的Helm Chart模板会自动将HTTPS对应的websecure端口赋值为0,试图跳过该端口的暴露。但GKE的负载均衡系统对端口号有严格要求:必须≥1,所以在同步Ingress资源时,控制器就抛出了这个400错误。
解决方案
这里有几个可行的解决办法,按推荐程度排序:
1. 显式指定SSL端口(最简单的临时修复)
在你的values.yaml中,给ssl.port设置一个合法的端口号(比如标准的443),即使ssl是禁用状态,这样Chart就不会把端口设为0:
ssl: enabled: false port: 443 # 新增这一行,指定合法端口 enforced: false insecureSkipVerify: false
2. 升级Traefik到2.x版本(长期最优解)
Traefik 1.6是非常老旧的版本(已经停止维护多年),后续的2.x版本不仅修复了这类云厂商兼容性问题,还提供了更强大的功能、更好的性能和安全性。你可以切换到Traefik官方的Helm Chart来部署最新版本,适配GKE的能力会更强。
3. 调整Service端口配置(自定义修复)
如果你坚持使用1.6版本,可以直接修改Helm Chart的Service模板,移除websecure端口的定义;或者在values.yaml中覆盖Service的端口配置,确保所有端口都有合法值:
service: ports: web: 80 admin: 8080 # 移除websecure端口的配置,或者指定合法端口
验证修复
修改完配置后,重新升级你的Helm Release:
helm upgrade --namespace kube-system traefik --values values.yaml stable/traefik
等待几分钟后,再查看Ingress的事件:
kubectl describe ingress traefik-dashboard -n kube-system
此时错误事件应该会消失,Traefik Dashboard的Ingress也会正常同步到GCP的负载均衡系统中。
内容的提问来源于stack exchange,提问作者Kévin Printz

