【问题标题】:Traefik & k3d: Dashboard is not reachableTraefik & k3d:仪表板不可访问
【发布时间】:2020-12-09 19:16:17
【问题描述】:

这是我的k3d 集群创建命令:

$ k3d cluster create arxius \
   --agents 3 \
   --k3s-server-arg --disable=traefik \
   -p "8888:80@loadbalancer" -p "9000:9000@loadbalancer" \
   --volume ${HOME}/.k3d/registries.yaml:/etc/rancher/k3s/registries.yaml

这里是我的节点:

 CONTAINER ID        IMAGE                      COMMAND                  CREATED             STATUS              PORTS                                                                   NAMES
c83f2f746621        rancher/k3d-proxy:v3.0.1   "/bin/sh -c nginx-pr…"   2 weeks ago         Up 21 minutes       0.0.0.0:9000->9000/tcp, 0.0.0.0:8888->80/tcp, 0.0.0.0:45195->6443/tcp   k3d-arxius-serverlb
0ed525443da2        rancher/k3s:v1.18.6-k3s1   "/bin/k3s agent"         2 weeks ago         Up 21 minutes                                                                               k3d-arxius-agent-2
561a0a51e6d7        rancher/k3s:v1.18.6-k3s1   "/bin/k3s agent"         2 weeks ago         Up 21 minutes                                                                               k3d-arxius-agent-1
fc131df35105        rancher/k3s:v1.18.6-k3s1   "/bin/k3s agent"         2 weeks ago         Up 21 minutes                                                                               k3d-arxius-agent-0
4cfceabad5af        rancher/k3s:v1.18.6-k3s1   "/bin/k3s server --d…"   2 weeks ago         Up 21 minutes                                                                               k3d-arxius-server-0
873a4f157251        registry:2                 "/entrypoint.sh /etc…"   3 months ago        Up About an hour    0.0.0.0:5000->5000/tcp                                                  registry.localhost

我已经使用默认 helm 安装命令安装了 traefik:

$ helm install traefik traefik/traefik

之后,还安装了ingressroute 以访问仪表板:

Name:         traefik-dashboard
Namespace:    traefik
Labels:       app.kubernetes.io/instance=traefik
              app.kubernetes.io/managed-by=Helm
              app.kubernetes.io/name=traefik
              helm.sh/chart=traefik-9.1.1
Annotations:  helm.sh/hook: post-install,post-upgrade
API Version:  traefik.containo.us/v1alpha1
Kind:         IngressRoute
Metadata:
  Creation Timestamp:  2020-12-09T19:07:41Z
  Generation:          1
  Managed Fields:
    API Version:  traefik.containo.us/v1alpha1
    Fields Type:  FieldsV1
    fieldsV1:
      f:metadata:
        f:annotations:
          .:
          f:helm.sh/hook:
        f:labels:
          .:
          f:app.kubernetes.io/instance:
          f:app.kubernetes.io/managed-by:
          f:app.kubernetes.io/name:
          f:helm.sh/chart:
      f:spec:
        .:
        f:entryPoints:
        f:routes:
    Manager:         Go-http-client
    Operation:       Update
    Time:            2020-12-09T19:07:41Z
  Resource Version:  141805
  Self Link:         /apis/traefik.containo.us/v1alpha1/namespaces/traefik/ingressroutes/traefik-dashboard
  UID:               1cbcd5ec-d967-440c-ad21-e41a59ca1ba8
Spec:
  Entry Points:
    traefik
  Routes:
    Kind:   Rule
    Match:  PathPrefix(`/dashboard`) || PathPrefix(`/api`)
    Services:
      Kind:  TraefikService
      Name:  api@internal
Events:      <none>

如你所见:

Match:  PathPrefix(`/dashboard`) || PathPrefix(`/api`)

我正在尝试访问仪表板。尽管如此:

未显示详细信息。

我也尝试过启动curl 命令:

curl 'http://localhost:9000/api/overview'
curl: (52) Empty reply from server

有什么想法吗?

【问题讨论】:

    标签: traefik k3s


    【解决方案1】:

    首先,使用 traefik helm chart(版本 9.1.1)的默认配置在端口 9000 上设置 entryPoint traefik,但不会自动公开它。因此,如果您检查为您创建的服务,您会发现它只映射了 webwebsecure 端点。

    检查来自kubectl get svc traefik -o yaml的这个sn-p

    spec:
      clusterIP: xx.xx.xx.xx
      externalTrafficPolicy: Cluster
      ports:
      - name: web
        nodePort: 30388
        port: 80
        protocol: TCP
        targetPort: web
      - name: websecure
        nodePort: 31115
        port: 443
        protocol: TCP
        targetPort: websecure
      selector:
        app.kubernetes.io/instance: traefik
        app.kubernetes.io/name: traefik
      sessionAffinity: None
      type: LoadBalancer
    

    作为explained in the docs,有两种方法可以访问您的信息中心。或者,您可以为端口 9000 启动到本地计算机的端口转发,或者通过 ingressroute 在另一个入口点上公开仪表板。

    请注意,即使您的 k3d 代理已经绑定到 9000,您仍然可以通过网络进行端口转发。如果某些负载平衡服务想要在该外部端口上公开,这只是保留。目前,这没有被使用,也不是任何解决方案所必需的。您仍然需要将端口转发到 traefik pod。建立端口转发后,您可以访问http://localhost:9000/dashboard/ 上的仪表板(注意PathPrefix 规则所需的尾部斜杠)。

    在另一个入口点公开的另一种解决方案不需要端口转发,但您需要注意正确的域名(dns 条目 + 主机规则)并注意不要将其公开给全世界,例如添加身份验证中间件。

    请参阅下面突出显示的更改:

    # dashboard.yaml
    apiVersion: traefik.containo.us/v1alpha1
    kind: IngressRoute
    metadata:
      name: dashboard
    spec:
      entryPoints:
        - web           # <-- using the web entrypoint, not the traefik (9000) one
      routes:           # v-- adding a host rule
        - match: Host(`traefik.localhost`) && (PathPrefix(`/dashboard`) || PathPrefix(`/api`))
          kind: Rule
          services:
            - name: api@internal
              kind: TraefikService
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-10
      • 2019-04-23
      • 1970-01-01
      • 1970-01-01
      • 2020-06-02
      相关资源
      最近更新 更多