下载工作台
PaaS 组件实战

网关与 Ingress:Traefik / APISIX

试读上半部分 · 解锁后可读全文

第 12 章 · 网关与 Ingress:Traefik / Caddy / APISIX / Ingress-Nginx

本章覆盖 集群入口 的四种常见形态:K8s 原生 Ingress 控制器、云原生边缘路由、自动 HTTPS、国产 API 网关。

前置:第 5 章 Nginx 反代基础;应用已部署在 app Namespace。


12.1 选型对比

需求首选商店 / 插件 id
K8s 标准 Ingress 资源Ingress-Nginx集群插件 ingress-nginx
自动服务发现 + 多入口Traefiktraefik
自动 HTTPS(Let's Encrypt)Caddycaddy
API 限流、鉴权、动态路由Apache APISIXapisix
简单静态 + 反代Nginxnginx(第 5 章)
                    Internet / 内网
                          │
          ┌───────────────┼───────────────┐
          ▼               ▼               ▼
   Ingress-Nginx      Traefik          APISIX
   (Ingress 资源)    (IngressRoute)    (Route + Plugin)
          │               │               │
          └───────────────┴───────────────┘
                          │
                    Service · Pod

12.2 集群插件:Nginx Ingress Controller

适用场景

Kubernetes 标准 Ingress;一个控制器管理多域名/路径;与 cert-manager 配合 HTTPS(需另行部署)。

安装

管理 → 集群插件 → Nginx Ingress Controlleringress-nginx)→ 安装。

Namespaceingress-nginx
访问提示控制器 Service 通常为 NodePort 或 HostNetwork(以安装后 访问说明 为准)

Ingress 资源语法

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: shop-api
  namespace: app
  annotations:
    nginx.ingress.kubernetes.io/proxy-body-size: "50m"
spec:
  ingressClassName: nginx
  rules:
    - host: api.shop.local
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: api
                port:
                  number: 8080

应用方式:运维 → 工作负载YAML 导入,或通过 kubectl apply -f ingress.yaml

验收

curl -H "Host: api.shop.local" http://<Ingress-NodePort>/health

本机测试:在 hosts 添加 <节点IP> api.shop.local

小紫运维

现象处理
404ingressClassName 是否为 nginx;后端 Service 端口是否正确
502后端 Pod 未 Ready;应用部署 → 日志管理
大文件上传失败加注解 proxy-body-size

12.3 Traefik v3.1

适用场景

云原生 动态路由;同时支持 Ingress、IngressRoute、TCP;内置 Dashboard。

商店部署参数

idtraefik
镜像traefik:v3.1
端口80(另补 8080 Dashboard)
Namespaceingress

环境变量与启动命令

args:
  - --api.dashboard=true
  - --api.insecure=true
  - --providers.kubernetesingress=true
  - --providers.kubernetescrd=true
  - --entrypoints.web.address=:80
ports:
  - containerPort: 80
  - containerPort: 8080   # Dashboard

需为 Traefik ServiceAccount 绑定 Ingress 读权限(RBAC);若商店模板未含,在 运维 → 角色绑定 按 Traefik 官方文档补充。

IngressRoute 示例(CRD)

apiVersion: traefik.io/v1alpha1
kind: IngressRoute
metadata:
  name: api-route
  namespace: app
spec:
  entryPoints:
    - web
  routes:
    - match: Host(`api.shop.local`)
      kind: Rule
      services:
        - name: api
          port: 8080

Dashboard:http://<节点IP>:<8080 NodePort>/dashboard/


以下内容需解锁后阅读

试读已结束。解锁本章 ¥5.00,或开通年度会员畅读全部教程。
年度会员 ¥199.00/年; 小紫 AI 工作台有效会员 ¥99.00/年

正文仅在服务端鉴权后下发,未付费无法获取下半部分内容。