【问题标题】:IngressRoute for Kubernetes-Dashboard using TraefikIngressRoute for Kubernetes-Dashboard 使用 Traefik
【发布时间】:2023-01-05 05:38:39
【问题描述】:

我正在将我的项目移动到 Kubernetes,使用 Traefik 进行路由,使用 MetalLB 作为我的负载均衡器。

我已经部署了几个应用程序,我想使用官方Kubernetes-Dashboard。所以我使用推荐的配置部署了 Kubernetes-Dashboard 并创建了 IngressRoute:

# dashboard.yaml
apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
  name: kubernetes-dashboard
  namespace: kubernetes-dashboard
spec:
  entryPoints:
    - websecure
  routes:
    - match: Host(`k8s.example.com`, `www.k8s.example.com`)
      kind: Rule
      middlewares:
        # - name: https-redirectscheme
        # - name: nginx-basic-auth
      services:
        - kind: Service
          name: kubernetes-dashboard
          # namespace: kubernetes-dashboard
          port: 443
  tls:
    secretName: k8s.example.com-tls

它显示在 Traefik 仪表板中,但是当我尝试访问 k8s.example.com 时,我得到 Internal Server Error

谢谢

【问题讨论】:

  • 你试过 Nodeport 了吗? IngressRoute 会更好,但我稍后会深入探讨。我会在答案中描述它——尽管它不是真正的答案;但至少你可以开始使用它
  • 你绝对应该设置一些spec.routes[].services[].scheme,因为仪表板期望 https。我们不知道你是如何部署 traefik 的:你确定有一些网络安全入口点吗? traefik 中的任何日志/您是否尝试提高日志级别?
  • 看起来在 traefik github 页面上有一些关于这个问题的问题:github.com/traefik/traefik/issues/4197github.com/traefik/traefik/issues/3906

标签: kubernetes traefik-ingress kubernetes-dashboard


【解决方案1】:

我有同样的问题 - 这就是为什么我结束这个问题。当我发现如何使用 IngressRoute 时,我会更新这个答案。

此答案描述了如何改用 NodePort

kubectl patch svc kubernetes-dashboard -p '{"spec": {"type": "NodePort"}}'
# Confirm
kubectl get svc -n kubernetes-dashboard kubernetes-dashboard -o yaml

# patch the dashboard
tee ~/nodeport_dashboard_patch.yaml<<EOF
spec:
  ports:
  - nodePort: 32000
    port: 443
    protocol: TCP
    targetPort: 8443
EOF

kubectl patch svc kubernetes-dashboard --patch "$(cat ~/nodeport_dashboard_patch.yaml)"

现在可以通过 Traefik 与 MetalLB 合作为您提供的外部 IP 访问仪表板,端口为:32000。
如果您有一个网站路由到您的集群,您可以使用:

https://yourwebsite.com:32000

如您共享的链接中所述,使用以下方法获取令牌:

export SA_NAME= # admin user from the ServiceAccount
kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep ${SA_NAME} | awk '{print $1}')

(我可以更改此答案以获得完整的脚本来执行此操作;如果您愿意的话)

【讨论】:

    【解决方案2】:

    在这里找到答案:https://stackoverflow.com/a/69999245/3883694

    您可以禁用 SSL 证书验证。

    https://doc.traefik.io/traefik/routing/overview/#transport-configuration

    ---
    apiVersion: traefik.containo.us/v1alpha1
    kind: ServersTransport
    metadata:
      name: traefik-dashboard-transport
      namespace: traefik
    spec:
      serverName: traefik-dashboard
      insecureSkipVerify: true
    ---
    apiVersion: traefik.containo.us/v1alpha1
    kind: IngressRoute
    metadata:
      name: dashboard
    spec:
      entryPoints:
        - web
      routes:
        - match: (PathPrefix(`/dashboard`) || Host(`traefik.example.com`))
          kind: Rule
          services:
          - name: api@internal
            kind: TraefikService
          serversTransport: traefik-dashboard-transport
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-23
      • 1970-01-01
      • 2020-02-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多