希望使用 Traefik 的自动服务发现、中间件链、Gateway API 或更简单的证书管理。迁移难点在注解语义、重写规则、限流和灰度配置。
kubectl get ingress -A -o yaml > ingress-all.yaml
grep -nE 'nginx.ingress.kubernetes.io|ingressClassName|host:|path:' ingress-all.yaml
helm repo add traefik https://traefik.github.io/charts
helm install traefik traefik/traefik \
--namespace traefik --create-namespace \
--set ingressClass.enabled=true \
--set ingressClass.name=traefik
kubectl -n traefik get svc
kubectl apply -f - <<'EOF'
apiVersion: traefik.io/v1alpha1
kind: IngressRoute
metadata:
name: demo
namespace: demo
spec:
entryPoints: [websecure]
routes:
- match: Host(`demo.example.com`) && PathPrefix(`/api`)
kind: Rule
services:
- name: api
port: 8080
middlewares:
- name: strip-api
EOF
kubectl apply -f - <<'EOF'
apiVersion: traefik.io/v1alpha1
kind: Middleware
metadata:
name: strip-api
namespace: demo
spec:
stripPrefix:
prefixes: ["/api"]
---
apiVersion: traefik.io/v1alpha1
kind: Middleware
metadata:
name: ratelimit
namespace: demo
spec:
rateLimit:
average: 100
burst: 50
EOF
kubectl -n demo create secret tls demo-tls --cert=fullchain.pem --key=privkey.pem
curl -k --resolve demo.example.com:443:$TRAEFIK_IP https://demo.example.com/api/health
rewrite-target 与 stripPrefix 语义不同,路径拼接错误。ingressClassName 没有切换,流量仍走旧控制器。kubectl — 管理 Ingress、IngressRoute、Middlewarecurl — 按 host 验证路由openssl — 检查证书traefik — 查看路由和中间件状态