Cloud-Native! 實戰 Helm 3 部署 Traefik 2

介紹

Traefik 是什麼?

Traefik, The Cloud Native Edge Routernode

Traefik 是一種現代 HTTP 反向代理和負載均衡器,用於輕鬆部署微服務。git

這篇文章對 Traefik 使用有不錯的解釋:我爲何要選擇traefik2作網關?github

準備工做

Helm V3

確保你已經安裝了 Helm V3,上一節已經介紹如何安裝它 -> Helm V3 的安裝web

## 查看下版本號
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-chartapi

它的 Chart Values.yaml,有不少細節的配置,你們能夠自行探索。爲少 後面也可能出篇文章仔細說說(估計沒個萬把字講不明白,微服務相關的東西太多了)app

這裏我簡單配置一下:負載均衡

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 加密模式:post

配置 頁面規則ui

添加 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

訪問面板

https://traefik.cloud-fe.com

完美部署。

使用 Traefik 中間件 BasicAuth 設置面板訪問權限

詳細文檔,請查閱 BasicAuth

配置 Secret

密碼必須是一個 MD5SHA1 或者 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

從新訪問面板

https://traefik.cloud-fe.com

看到沒,驗證經過才能訪問。

參考 & 感謝

一塊兒 K8S DevOps & GitOps 雲☁️原生,關注黑客下午茶

相關文章
相關標籤/搜索