我在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
的东西,并创建一个入口对象将/
映射到该服务,但似乎应该这样做
看起来我在本地运行的是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
我找到了这个1.7版本的文档,它表明有一个注释正是为了这个目的:
traefik.ingress.kubernetes.io/app-root: "/index.html"
:重定向
但是在grafana入口对象上设置它似乎没有没有任何影响,我还没有找到2.x的类似文档)我四处看了看在这里,例子)。
设置这种重定向的正确方法是什么?
因为我还没能弄清楚交通问题,我想我应该把我的解决方案贴在这里,以防其他人遇到同样的情况。我希望有人知道正确的方法来做这件事,如果我找到了,我会更新这个答案。
我添加了一个新的部署,将darkhttpd作为一个简单的director运行:
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
对应的Service:
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
这些都是用自定义部署的,由它来处理在适当的位置添加标签和选择器。的kustomization.yaml
看起来像:
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- deployment.yaml
- ingress.yaml
- service.yaml
commonLabels:
component: redirector
所有这些就绪后,对http://monitoring.internal/
的请求将击中重定向器pod。