在 k3s 上使用 traefik 入口生成重定向?

Posted

技术标签:

【中文标题】在 k3s 上使用 traefik 入口生成重定向?【英文标题】:Generating a redirect with traefik ingress on k3s? 【发布时间】:2021-10-09 01:12:59 【问题描述】:

我在 k3s 下运行 prometheus 和 grafana,可分别在 http://monitoring.internal/prometheus 和 http://monitoring.internal/grafana 访问。例如,grafana Ingress 对象如下所示:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: grafana
  annotations:
    kubernetes.io/ingress.class: traefik
spec:
  rules:
    - host: monitoring.internal
      http:
        paths:
          - path: /grafana
            pathType: Prefix
            backend:
              service:
                name: grafana
                port:
                  number: 3000

这很好用,除了如果你降落在 http://monitoring.internal/,您收到 404 错误。我想 请求 http://monitoring.internal/ 重定向到 http://monitoring.internal/grafana。我也许可以创造另一个 运行类似darkhttpd ... --forward-all http://monitoring.internal/grafana 的服务,并创建一个 Ingress 对象 这会将/ 映射到该服务,但似乎应该有 成为 Traefik 本身的一种方式。

看起来我在本地运行 Traefik 2.4.8:

$ kubectl -n kube-system exec -it deployment/traefik -- traefik version
Version:      2.4.8
Codename:     livarot
Go version:   go1.16.2
Built:        2021-03-23T15:48:39Z
OS/Arch:      linux/amd64

我发现 this documentation for 1.7 表明有一个注释正是用于此目的:

traefik.ingress.kubernetes.io/app-root: "/index.html": 重定向 对 / 到已定义路径的所有请求。

但是在 grafana 入口对象上设置它似乎没有 任何影响,我还没有找到 2.x 的类似文档 (我环顾四周 here,为 示例)。

设置这种重定向的正确方法是什么?

【问题讨论】:

【参考方案1】:

由于我还没有弄清楚 traefik,我想我会在这里发布我的解决方案,以防其他人遇到同样的情况。我希望有人知道这样做的正确方法,如果我知道我会更新这个答案。

我添加了一个新部署,将 darkhttpd 作为简单的指挥器运行:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: redirector
spec:
  replicas: 1
  template:
    spec:
      containers:
        - name: redirector
          image: docker.io/alpinelinux/darkhttpd
          ports:
            - containerPort: 8080
          args:
            - --forward-all
            - http://monitoring.internal/grafana

对应的服务:

apiVersion: v1
kind: Service
metadata:
  name: redirector
spec:
  ports:
    - port: 8080
      protocol: TCP
      targetPort: 8080

还有以下 Ingress 对象:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: redirector
  annotations:
    kubernetes.io/ingress.class: traefik
spec:
  rules:
    - host: monitoring.internal
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: redirector
                port:
                  number: 8080

这些都是用kustomize部署的,它负责 在适当的地方添加标签和选择器。这 kustomization.yaml 样子:

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization

resources:
- deployment.yaml
- ingress.yaml
- service.yaml

commonLabels:
  component: redirector

所有这些都到位后,对http://monitoring.internal/ 的请求会到达重定向器窗格。

【讨论】:

以上是关于在 k3s 上使用 traefik 入口生成重定向?的主要内容,如果未能解决你的问题,请参考以下文章

在 k3s 上使用 Traefik 时如何获取客户端的真实 IP 地址?

Traefik 失败 https 重定向

kubernetes ingress traefik 入门

在 Traefik 中从一个域重定向到另一个域

对于 k3s 中的 Traefik Ingress Controller,禁用 TLS 验证

在k3s中启用其自带ingress——traefik的web-ui