操作场景
Traefik 是一款优秀的反向代理工具,与 Nginx 相比,Traefik 具有以下优势: 原生支持动态配置。例如,Kubernetes 的 Ingress 资源或 IngressRoute 等 CRD 资源(Nginx 每次需重新加载完整配置,部分情况下可能会影响连接)。
原生支持服务发现。使用 Ingress 或 IngressRoute 等动态配置后,会自动 watch 后端 endpoint,同步更新到负载均衡的后端列表中。
提供美观的 Dashboard 管理页面。
原生支持 Metrics,与 Prometheus 和 Kubernetes 无缝集成。
拥有更丰富的高级功能。例如,多版本的灰度发布、流量复制、自动生成 HTTPS 免费证书、中间件等。
本文将介绍如何在 TKE 集群安装 Traefik 以及提供通过 Traefik 使用 Ingress 和 IngressRoute 示例。
前提条件
操作步骤
安装 Traefik
1. 执行以下命令,添加 Traefik 的 Helm chart repo 源。示例如下:
helm repo add traefik https://helm.traefik.io/traefik
2. 准备安装配置文件 values-traefik.yaml
。示例如下:
providers:
kubernetesIngress:
publishedService:
enabled: true
additionalArguments:
- "--providers.kubernetesingress.ingressclass=traefik"
- "--log.level=DEBUG"
service:
annotations:
service.cloud.tencent.com/direct-access: "true"
service.kubernetes.io/tke-existed-lbid: lb-lb57hvgl
ports:
web:
expose: true
exposedPort: 80
websecure:
expose: true
exposedPort: 443
deployment:
enabled: true
replicas: 1
podAnnotations:
tke.cloud.tencent.com/networks: "tke-route-eni"
resources:
requests:
tke.cloud.tencent.com/eni-ip: "1"
limits:
tke.cloud.tencent.com/eni-ip: "1"
说明:
完整的默认配置可执行 helm show values traefik/traefik
命令查看。
3. 执行以下命令将 Traefik 安装到 TKE 集群。示例如下:
3. 执行以下命令将 Traefik 安装到 TKE 集群。示例如下:
kubectl create ns ingress
helm upgrade --install traefik -f values-traefik.yaml traefik/traefik
4. 执行以下命令,获取流量入口的 IP 地址(如下为 EXTERNAL-IP 字段)。示例如下:
$ kubectl get service -n ingress
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
traefik LoadBalancer 172.22.252.242 49.233.239.84 80:31650/TCP,443:32288/TCP 42h
使用 Ingress
Traefik 支持使用 Kubernetes 的 Ingress 资源作为动态配置,可直接在集群中创建 Ingress 资源用于对外暴露集群,需要加上指定的 Ingress class(安装 Traefik 时定义)。示例如下:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: test-ingress
annotations:
kubernetes.io/ingress.class: traefik
spec:
rules:
- host: traefik.demo.com
http:
paths:
- path: /test
backend:
serviceName: nginx
servicePort: 80
注意:
TKE 暂未将 Traefik 产品化,无法直接在 TKE 控制台进行可视化创建 Ingress,需要使用 YAML 进行创建。
使用 IngressRoute
Traefik 不仅支持标准的 Kubernetes Ingress 资源,也支持 Traefik 特有的 CRD 资源,例如 IngressRoute,可以支持更多 Ingress 不具备的高级功能。IngressRoute 使用示例如下:
apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
name: test-ingressroute
spec:
entryPoints:
- web
routes:
- match: Host(`traefik.demo.com`) && PathPrefix(`/test`)
kind: Rule
services:
- name: nginx
port: 80
本页内容是否解决了您的问题?