如何通过配置在k3d/k3s中暴露Traefik v2仪表板?

7

*此内容已在k3d github discussionsRancher论坛上的一篇帖子以及traefik社区讨论版块中都有发布。

2020年的教程提到需要编辑Traefik ConfigMap,但现在它去哪了呢?

Traefik安装说明提到了几种公开Traefik仪表盘的方法:

  1. 这种方法可以使用,但不是持久性的:使用一次性命令:kubectl -n kube-system port-forward $(kubectl -n kube-system get pods --selector "app.kubernetes.io/name=traefik" --output=name) 9000:9000

  2. 我无法使此方法起作用:创建一个"IngressRoute" YAML文件并将其应用到集群中。这可能是由于Klipper LB和/或我的无知造成的。

traefik部署未使用configmap

对于一个有2个服务器和2个代理的集群,kubectl -n kube-system describe deploy traefik没有显示任何configmap:

  Volumes:
   data:
    Type:       EmptyDir (a temporary directory that shares a pod's lifetime)
    Medium:     
    SizeLimit:  <unset>
   tmp:
    Type:               EmptyDir (a temporary directory that shares a pod's lifetime)
    Medium:             
    SizeLimit:          <unset>
  Priority Class Name:  system-cluster-critical

找不到”traefik“配置映射

kubectl get -n kube-system cm 命令显示:

NAME                                 DATA   AGE
chart-content-traefik                0      28m
chart-content-traefik-crd            0      28m
chart-values-traefik                 1      28m
chart-values-traefik-crd             0      28m
cluster-dns                          2      28m
coredns                              2      28m
extension-apiserver-authentication   6      28m
k3s                                  0      28m
k3s-etcd-snapshots                   0      28m
kube-root-ca.crt                     1      27m
local-path-config                    4      28m

traefik pods未使用configmap

查看pods的描述也没有发现任何内容。使用kubectl -n kube-system describe pod traefik-.... 命令也没找到相关的configmap。

Traefik端口被占用但无响应

但是,我发现了Traefik pod 中正在使用的端口参数:

      --entryPoints.traefik.address=:9000/tcp
      --entryPoints.web.address=:8000/tcp
      --entryPoints.websecure.address=:8443/tcp

然而,这些端口未公开。因此,我尝试使用kubectl port-forward命令将它们暴露出来:kubectl port-forward pods/traefik-97b44b794-r9srz 9000:9000 8000:8000 8443:8443 -n kube-system --address 0.0.0.0,但是当我使用curl -v localhost:9000 (或8000或8443),以及curl -v localhost:9000/dashboard时,会出现“404 Not Found”的错误。
在获得traefik终端后,我发现了本地打开的端口,但似乎没有任何响应。
/ $ netstat -lntu
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       
tcp        0      0 :::8443                 :::*                    LISTEN      
tcp        0      0 :::8000                 :::*                    LISTEN      
tcp        0      0 :::9000                 :::*                    LISTEN      
/ $ wget localhost:9000
Connecting to localhost:9000 ([::1]:9000)
wget: server returned error: HTTP/1.1 404 Not Found
/ $ wget localhost:8000
Connecting to localhost:8000 ([::1]:8000)
wget: server returned error: HTTP/1.1 404 Not Found
/ $ wget localhost:8443
Connecting to localhost:8443 ([::1]:8443)
wget: server returned error: HTTP/1.1 404 Not Found

版本

k3d version v4.4.7
k3s version v1.21.2-k3s1 (default)

我认为你需要在 Pod 上执行 kubectl describe 命令。 - P....
谢谢@P.... 我已经更新了问题并附上了发现。我看到有潜在的端口,也许我只需要弄清如何公开它们... - Eric Swanson
你好,我遇到了相同的问题,我以为它不起作用,但事实证明我需要在URL中添加“/dashboard/”。请尝试检查http://localhost:9000/dashboard/#/http/routers,看看从dashboard.yml应用的新入口路由是否反映出来。如果是这样,那么您只需要访问http://<domain>/dashboard/ - Jessie Baltazar
3个回答

18

我找到了一个解决方案,希望很快能有更好的解决办法。

  1. 您需要从个人计算机上控制k3s集群,而不是通过ssh进入主节点,因此将 /etc/rancher/k3s/k3s.yaml 添加到本地的 ~/.kube/config 中(为了在最后一步中进行端口转发到您的个人计算机)。
  2. 现在按以下方式获取您的pod名称:

kubectl get pod -n kube-system

并搜索 traefik-something-somethingElse,我的是 traefik-97b44b794-bsvjn

  1. 现在需要从您的个人计算机运行此部分代码。

kubectl port-forward traefik-97b44b794-bsvjn -n kube-system 9000:9000

  1. 在您喜欢的浏览器中获取 http://localhost:9000/dashboard/不要忘记第二个斜杠
  2. 尽情享受仪表板吧!

请注意,在 /var/lib/rancher/k3s/server/manifests/traefik.yaml 中必须先启用仪表板,方法是添加:

dashboard:
  enabled: true

10
请您将第四步醒目地加粗,并着重提醒“不要忘记最后的(/)斜杠”,因为我刚开始没有看到它,浪费了将近半个小时。谢谢。 - ricristian
你确定 dashboard 是一个顶级元素吗?根据 values.yaml 的描述,它是 pilotingressRoute 的子元素... - Marc
@Marc,它实际上是一个顶级元素。令人困惑,我知道。 - Ringil
1
可以一行代码完成,例如 kubectl port-forward $(kubectl get pod -n kube-system -l app.kubernetes.io/name=traefik -o NAME) -n kube-system 9000:9000 - mpromonet

10

Jakub的回答很好。但不幸的是,如果k3s重新启动,配置将重置。根据k3s文档,如果您创建一个名为/var/lib/rancher/k3s/server/manifests/traefik-config.yaml的自定义文件,k3s' traefik将自动更新为此新配置并使用其值。这是我所拥有的:

apiVersion: helm.cattle.io/v1
kind: HelmChartConfig
metadata:
  name: traefik
  namespace: kube-system
spec:
  valuesContent: |-
    dashboard:
      enabled: true
    ports:
      traefik:
        expose: true # this is not recommended in production deployments, but I want to be able to see my dashboard locally
    logs:
      access:
        enabled: true

使用这种设置,您可以跳过端口转发并直接访问http://localhost:9000/dashboard/

已测试并且运行正常,而且是持久的。您也可以使用 http://traefik.localhost/dashboard 访问仪表板。谢谢。 - Roberto
这是针对k3s还是k3d的?我应该在哪里为k3d创建那个文件? - Alex Dresko
这是针对k3s的。我从未尝试过k3d,所以我只能说祝你好运。 - Ringil
3
@AlexDresko 我也在使用 k3d 并且正在寻找同样的东西。由于在我们的情况下,k3s 在容器中运行,因此我们需要将该文件填充到容器中。一种简单的方法是只需执行 docker exec -it k3d-dash-server-0 sh(无论您的 k3s 容器如何命名),然后使用 vi 创建该文件。 然后您可以 stop 和重新start 集群(不要删除-否则该更改将丢失)。我认为应该有一种将该文件设置为卷的方法,但还没有深入研究。希望这有所帮助。 - AkaiBukai

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接