Traefik Ingress Controller 設定花了不少時間,簡單小記一些東西。
使用前可以用這個看你的 Kubernetes 支援哪些 API,撰寫前記得看網路上資源是不是有一致。有些版本更新會不一樣。
1 | kubectl api-resource |
內容:Install Traefik Ingress Controller on Kubernetes using Helm 3
安裝 Helm
1 | curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash |
其他可以參考Helm | Helm Completion Bash
helm 佈署 Traefik
1 | # 加入 Repo |
這邊我使用--set
去設定 values.yml,後面也可以用 values.yml 去install/upgrade K8s服務,但我目前沒有找到快速建置 values.yml方法,其實我在想是不是 helm pull xxx
下來管理檔案室最好作法?後續再研究。
expose dashboard(測試失敗)
需要看你的namespace 需要補上-n namespace
。
1 | kubectl port-forward $(kubectl get pods --selector "app.kubernetes.io/name=traefik" --output=name) 9000:9000 |
不過我上面都會 404,目前沒有測成功…
有查詢相關資料
- 还不会Traefik?看这篇文章就够了!-51CTO.COM
- Helm Get Values For a Helm Release {Review Revisions}
- SSH Tunneling (Port Forwarding) 詳解 · John Engineering Stuff
- RedirectRegex | Traefik | v2.3
- traefik 9.12.0 · traefik/traefik
http://192.168.0.6:8080/api/http/routers
,可用相關API路徑程式查看有哪些Service,因為。
設定 ingress(prefix)
這邊我因為測試,所以把traefik 用在 default namespace。
很多範例都有講到,但很多都是 ingress 設定,多子網域設定,但沒有講道 prefix 設定。
我原本有找到 prefix,但發現倒到 nginx-web pod 都會 404 。
後來我仔細看一下,多了這個nginx.ingress.kubernetes.io/rewrite-target: /
,以下是官方 nginx 設定。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: minimal-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
ingressClassName: nginx-example
rules:
- http:
paths:
- path: /testpath
pathType: Prefix
backend:
service:
name: test
port:
number: 80
Traefik v1 也是用 rewrite,但是 v2 就沒有看到 rewrite 關鍵字,後來找到 stripPrefix
關鍵字才找到方法, 參考:Introduction to Traefik v2 Ingress Controller in Jelastic Kubernetes | Jelastic。
1 | apiVersion: networking.k8s.io/v1 |
簡單記錄重點:
- 設定 Middleware 和 Ingress
- Ingress 上的
traefik.ingress.kubernetes.io/router.middlewares
需要設定namespace
-middleware
@kubernetescrd - Middleware 需要設定 名稱(如:testpath-prefix)
- prefixes 要去掉路徑做設定
強制使用 TLS 連線
1 | traefik.ingress.kubernetes.io/router.tls: "true" |
設定別的 namespace (測試失敗)
可能用Service · Kubernetes 中文指南——云原生应用架构实战手册
Ingress 不能跨 namespace,但有查到 Ingressroute 可以跨 namespace。但我有找到用 workaound 方法去解決跟 namespace 方法,是使用 ExtenalName ,可參考simple demo on routing cross namespace by traefik ingress, docker for mac。
測試失敗…,Traefik做的時候,Ingress 設定不上去 Service。
參考網路文章
- Ingress traffic | Linkerd
- Ingress rules in different Kubernetes namespaces | Vincent-Philippe Lauzon’s
- simple demo on routing cross namespace by traefik ingress, docker for mac
clusterIP 無法 Ping,然怪我怎麼 Ping都失敗,但其實 curl 都是正常的\ - Kubernetes网络的iptables模式和ipvs模式支持ping分析 - 小家电维修 - 博客园
最後設定 traefik-ingress.yml
這有關最後筆記,相關 Grafana 可以看 Loki配置會一起用
1 | apiVersion: networking.k8s.io/v1 |