Cloud-Native! 实战 Helm 3 部署 Traefik 2_Traefik

介绍

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

Cloud-Native! 实战 Helm 3 部署 Traefik 2_Traefik_02

配置 页面规则

Cloud-Native! 实战 Helm 3 部署 Traefik 2_Traefik_03

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

Cloud-Native! 实战 Helm 3 部署 Traefik 2_Traefik_04

OK,Ready!!!

部署 Traefik 面板

解析域名

这里 为少traefik.cloud-fe.com 解析到我的 K8S 集群上。

上一讲,为少 已经将域名停靠在了 cloudflare 上了,所以:

Cloud-Native! 实战 Helm 3 部署 Traefik 2_Traefik_05

kube-system 下签发证书

上一节,为少有详细讲: 配置 Certificate

所以:

kubectl apply -f cloudfe-certificate.yaml -n kube-system

kube-system 下查看证书

kubectl describe Certificate -n kube-system

Cloud-Native! 实战 Helm 3 部署 Traefik 2_Traefik_06

部署面板 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

Cloud-Native! 实战 Helm 3 部署 Traefik 2_Traefik_07

完美部署。

使用 Traefik 中间件 BasicAuth 设置面板访问权限

详细文档,请查阅 BasicAuth

Cloud-Native! 实战 Helm 3 部署 Traefik 2_Traefik_08

配置 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

看到没,验证通过才能访问。

Cloud-Native! 实战 Helm 3 部署 Traefik 2_Traefik_09

参考 & 感谢

  • Traefik 官方文档
  • Traefik 中文文档
  • traefik-helm-chart
  • 我为什么要选择traefik2做网关?
  • 一文搞懂 Traefik2.1 的使用

一起 K8S DevOps & GitOps 云☁️原生,关注黑客下午茶。

Cloud-Native! 实战 Helm 3 部署 Traefik 2_Traefik_10