Kubernetes Trefik

Trefik 的作用与应用场景

Traefik 是一个现代的 HTTP 反向代理和负载均衡器,它被设计用于简化微服务架构中的网络流量管理。

1、动态路由与服务发现

2、负载均衡

3、TLS/SSL 终止与证书管理

4、认证、限流、IP 白名单/黑名单、重定向、Header 操作

Trefik 的架构

Trefik 安装


1、准备 traefik-values.yaml 配置文件

cat traefik-values.yaml 
deployment:
  enabled: true

image:
  repository: harbor250.oldboyedu.com/greytracks/traefik
  tag: 3.4.3
  pullPolicy: IfNotPresent

ports:
  traefik:
    port: 9000
    expose:
      enabled: true
    exposedPort: 9000
  web:
    port: 8000
    expose:
      enabled: true
    exposedPort: 80
    protocol: TCP
    nodePort: 7777
  websecure:
    port: 8443
    expose:
      enabled: true
    exposedPort: 443
    protocol: TCP

service:
  enabled: true
  type: NodePort

ingressRoute:
  dashboard:
    enabled: false

providers:
  kubernetesCRD:
    enabled: true
  kubernetesIngress:
    enabled: true

logs:
  general:
    level: INFO
  access:
    enabled: true

additionalArguments:
  - "--api.insecure=true"
  - "--api.dashboard=true"


2、安装命令

helm install traefik ./traefik-36.3.0.tgz \
  --namespace traefik-system \
  --create-namespace \
  -f value.yaml

ingress 与 service 的区别

1.Service是实现了四层代理,通过 kube-proxy 实现负载均衡,无需额外部署组件,是 Kubernetes 原生资源。

2.Ingress实现的是七层代理,但需要部署附加组件(IngressClass[如 Nginx Ingress Controller、Traefik 等])来解析Ingress资源清单;

Trefik 发布 http 域名案例

cat traefik-xiuxian-ingress.yaml 


apiVersion: traefik.io/v1alpha1
kind: IngressRoute
metadata:
  name: xiuxian-v1
  namespace: default
spec:
  entryPoints:
    - web
  routes:
    - match: Host(`v1.oldboyedu.com`)
      kind: Rule
      services:
        - name: svc-xiuxian-v1
          port: 80

---

apiVersion: traefik.io/v1alpha1
kind: IngressRoute
metadata:
  name: xiuxian-v2
  namespace: default
spec:
  entryPoints:
    - web
  routes:
    - match: Host(`v2.oldboyedu.com`)
      kind: Rule
      services:
        - name: svc-xiuxian-v2
          port: 80

---

apiVersion: traefik.io/v1alpha1
kind: IngressRoute
metadata:
  name: xiuxian-v3
  namespace: default
spec:
  entryPoints:
    - web
  routes:
    - match: Host(`v3.oldboyedu.com`)
      kind: Rule
      services:
        - name: svc-xiuxian-v3
          port: 80


应用资源

kubectl apply -f  traefik-xiuxian-ingress.yaml 


增加 hosts

10.0.0.231     v1.oldboyedu.com v2.oldboyedu.com v3.oldboyedu.com


访问测试

Trefik 通过 IngressRoute 实现负载均衡

cat xiuxian-loadbalancer.yaml

apiVersion: traefik.io/v1alpha1
kind: IngressRoute
metadata:
  name: xiuxian-loadbalancer
  namespace: default
spec:
  entryPoints:
    - web
  routes:
    - match: Host(`xiuxian.oldboyedu.com`)
      kind: Rule
      services:
        - name: svc-xiuxian-v1
          port: 80
        - name: svc-xiuxian-v2
          port: 80


应用资源

kubectl apply -f xiuxian-loadbalancer.yaml


测试负载

for i in {1..1000}; do curl -s http://xiuxian.oldboyedu.com:7777; done | grep -o "凡人修仙传 v[12]" | sort | uniq -c
   
    500 凡人修仙传 v1
    500 凡人修仙传 v2

成功!


Trefik 基于 TraefikService 与 IngressRoute 实现金丝雀发布(灰度发布)

vim grayrelease-xiuxian.yaml 


# grayrelease-xiuxian.yaml
apiVersion: traefik.io/v1alpha1
kind: TraefikService
metadata:
  name: xiuxian-grayrelease-service
  namespace: default # 确保与你的 IngressRoute 命名空间一致
spec:
  weighted:
    services:
      - name: svc-xiuxian-v1
        port: 80
        weight: 90 # 90% 的流量导向稳定版 v1
      - name: svc-xiuxian-v2
        port: 80
        weight: 10 # 10% 的流量导向开发版 v2

---

apiVersion: traefik.io/v1alpha1
kind: IngressRoute
metadata:
  name: xiuxian-canary-ingressroute
  namespace: default # 确保与你的 TraefikService 命名空间一致
spec:
  entryPoints:
    - web # 假设你的 Traefik 监听了名为 'web' 的入口点
  routes:
    - match: Host(`xiuxian.oldboyedu.com`)
      kind: Rule
      services:
        - name: xiuxian-grayrelease-service # 指向我们上面定义的 TraefikService
          kind: TraefikService      # 明确指出这是一个 TraefikService


应用资源

kubectl apply -f grayrelease-xiuxian.yaml 


测试负载

for i in {1..1000}; do curl -s http://xiuxian.oldboyedu.com:7777; done | grep -o “凡人修仙传 v[12]” | sort | uniq -c

900 凡人修仙传 v1
100 凡人修仙传 v2

成功!

上一篇
下一篇