【问题标题】:Error with Traefik on Google Kubernetes EngineGoogle Kubernetes Engine 上的 Traefik 错误
【发布时间】:2018-05-26 11:39:07
【问题描述】:

我正在尝试将 Traefik 部署为我的 GKE 集群上的入口控制器。 这是一个有 3 个节点的基本集群。

我习惯于在 Kubespray 部署的 Kubernetes 集群上使用清单部署 Traefik,但我们正在将一些基础架构迁移到 GCP。

所以我尝试使用 community helm chart 部署 Traefik,配置如下:

image: traefik
imageTag: 1.6.2

serviceType: LoadBalancer
loadBalancerIP: X.X.X.X

kubernetes:
  ingressClass: traefik

ssl:
  enabled: false
  enforced: false
  insecureSkipVerify: false

acme:
  enabled: false
  email: hello@mydomain.com
  staging: true
  logging: false
  challengeType: http-01

dashboard:
  enabled: true
  domain: traefik.mydomain.com
  ingress:
    annotations:
      kubernetes.io/ingress.class: traefik

gzip:
  enabled: true
accessLogs:
  enabled: true
  format: common 

然后使用以下命令启动它:

helm install --namespace kube-system --name traefik --values values.yaml stable/traefik

我的 K8S 集群上一切都很好地部署了,除了仪表板入口出现以下错误:

kevin@MBP-de-Kevin ~/W/g/s/traefik> kubectl describe ingress traefik-dashboard -n kube-system
Name:             traefik-dashboard
Namespace:        kube-system
Address:
Default backend:  default-http-backend:80 (10.20.2.6:8080)
Rules:
  Host                      Path  Backends
  ----                      ----  --------
  traefik.mydomain.com
                               traefik-dashboard:80 (10.20.1.14:8080)
Annotations:
Events:
  Type     Reason  Age   From                     Message
  ----     ------  ----  ----                     -------
  Warning  Sync    4m    loadbalancer-controller  googleapi: Error 400: Invalid value for field 'namedPorts[2].port': '0'. Must be greater than or equal to 1, invalid

知道我的错误在哪里吗?

非常感谢!

【问题讨论】:

  • traefik-dashboard:80 (10.20.1.14:8080)为什么会有两个不同的端口?

标签: kubernetes google-cloud-platform traefik google-kubernetes-engine kubernetes-ingress


【解决方案1】:
Invalid value for field 'namedPorts[0].port': '0'

当 GKE Ingress 使用的 Service 类型为 ClusterIP(而不是 NodePort)时,会发生此错误。 GKE Ingress 要求支持服务的类型为 NodePort。

【讨论】:

  • 您好,感谢您的回答!是的,我认为这与 GKE 入口的 traefik 仪表板句柄有关。但这很奇怪,因为我尝试使用以下注释指定入口类:kubernetes.io/ingress.class: traefik 关于入口忽略注释的原因有什么想法吗?
  • Traefik 绝对应该尊重该注释(然后 GKE 的 Ingress 控制器肯定应该忽略此类 Ingress)。您能否分享一下您的仪表板的 Ingress 规范(以防这仍然与您相关)?
【解决方案2】:

当入口控制器期望的服务不存在时,也会发生这种情况。 (可能是不小心删除了)

gke 上的 nginx-ingress-controller 与公开为 clusterIP 的服务一起使用

【讨论】:

    【解决方案3】:

    您忘记启用 rbac。

    下面的示例工作正常

    serviceType: LoadBalancer
    rbac:
      enabled: true
    dashboard:
      enabled: true
      domain: dash.example.com
      ingress:
        annotations:
          kubernetes.io/ingress.class: traefik
    kubernetes:
      ingressClass: traefik
      namespaces:
        - default
        - kube-system
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-26
      • 2016-06-01
      • 1970-01-01
      • 2020-10-28
      • 1970-01-01
      • 2022-07-31
      相关资源
      最近更新 更多