
介紹
Traefik 是什么?
Traefik, The Cloud Native Edge Router
Traefik 是一種現代 HTTP 反向代理和負載均衡器,用於輕松部署微服務。
這篇文章對 Traefik 使用有不錯的解釋:我為什么要選擇traefik2做網關?
准備工作
Helm V3
確保你已經安裝了 Helm V3,上一節已經介紹如何安裝它 -> Helm V3 的安裝。
## 查看下版本號
helm version
# version.BuildInfo{Version:"v3.0.1", GitCommit:"7c22ef9ce89e0ebeb7125ba2ebf7d421f3e82ffa", GitTreeState:"clean", GoVersion:"go1.13.4"}
Traefik v2 helm chart values.yaml
GitHub 倉庫:traefik-helm-chart
它的 Chart Values.yaml,有很多細節的配置,大家可以自行探索。為少 后面也可能出篇文章仔細說說(估計沒個萬把字講不明白,微服務相關的東西太多了)
這里我簡單配置一下:
traefik-v2-chart-values.yaml
service:
type: ClusterIP
ingressRoute:
dashboard:
enabled: false
nodeSelector:
kubernetes.io/hostname: k8s-master-1
ports:
web:
hostPort: 80
websecure:
hostPort: 443
traefik:
port: 8080
hostPort: 8080
exposedPort: 8080
expose: true
additionalArguments:
- "--serversTransport.insecureSkipVerify=true"
- "--api.insecure=true"
- "--api.dashboard=true"
CloudFlare 配置(你可能不需要)
配置 SSL/TLS 加密模式:

配置 頁面規則

添加 Traefik v2 helm chart
helm repo add traefik https://containous.github.io/traefik-helm-chart
helm repo update # 更新下倉庫
helm v3 部署 Traefik v2
helm install traefik traefik/traefik -f traefik-v2-chart-values.yaml -n kube-system
# helm uninstall traefik -n kube-system # 卸載 traefik

OK,Ready!!!
部署 Traefik 面板
解析域名
這里 為少 將 traefik.cloud-fe.com 解析到我的 K8S 集群上。
上一講,為少 已經將域名停靠在了 cloudflare 上了,所以:

kube-system 下簽發證書
上一節,為少有詳細講: 配置 Certificate
所以:
kubectl apply -f cloudfe-certificate.yaml -n kube-system
kube-system 下查看證書
kubectl describe Certificate -n kube-system

部署面板 Ingress Route
traefik-dashboard-ingress-route.yaml 如下:
apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
name: traefik-dashboard-route
spec:
entryPoints:
- websecure
tls:
secretName: cloudfe-cert-tls
routes:
- match: Host(`traefik.cloud-fe.com`)
kind: Rule
services:
- name: traefik
port: 8080
應用配置
kubectl apply -f traefik-dashboard-ingress-route.yaml -n kube-system
# kubectl delete -f traefik-dashboard-ingress-route.yaml -n kube-system
訪問面板

完美部署。
使用 Traefik 中間件 BasicAuth 設置面板訪問權限
詳細文檔,請查閱 BasicAuth

配置 Secret
密碼必須是一個 MD5,SHA1 或者 BCrypt 的哈希值。
這里我比如說是使用 htpasswd 產生一個用戶名是 cloudfe,密碼為 cloudfe123 的哈希值。
htpasswd -nb cloudfe cloudfe123
# cloudfe:$apr1$ETFHyV73$hzz88wP7TNSWhCDByD1VT0
traefik-authsecret.yaml 如下:
apiVersion: v1
kind: Secret
metadata:
name: traefik-authsecret
type: Opaque
stringData:
users: cloudfe:$apr1$ETFHyV73$hzz88wP7TNSWhCDByD1VT0
配置 BasicAuth 中間件
traefik-basic-auth.yaml 如下:
apiVersion: traefik.containo.us/v1alpha1
kind: Middleware
metadata:
name: traefik-basic-auth
spec:
basicAuth:
secret: traefik-authsecret
重新配置 Ingress Route
traefik-dashboard-ingress-route.yaml 如下:
apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
name: traefik-dashboard-route
spec:
entryPoints:
- websecure
tls:
secretName: cloudfe-cert-tls
routes:
- match: Host(`traefik.cloud-fe.com`)
kind: Rule
services:
- name: traefik
port: 8080
middlewares:
- name: traefik-basic-auth
應用配置
kubectl apply -f traefik-authsecret.yaml -n kube-system
kubectl apply -f traefik-basic-auth.yaml -n kube-system
kubectl apply -f traefik-dashboard-ingress-route.yaml -n kube-system
重新訪問面板
看到沒,驗證通過才能訪問。

參考 & 感謝
一起 K8S DevOps & GitOps 雲☁️原生,關注黑客下午茶。
