Docker KubernetesNotes

第 15 章:Ingress 与 Gateway

zjc 于 2026-01-15 发布

这是《Docker 与 Kubernetes 零基础实战指南》的独立章节版。本章从概念、实操和生产排查三个视角展开,代码块保留了原书可直接运行的版本。 Ingress 提供 HTTP/HTTPS 路由,Gateway API 是更通用的新一代路由模型。两者都依赖具体控制器实现。

15.1 Ingress 架构

Client
  -> LoadBalancer
     -> Ingress Controller Pod
        -> Service
           -> Pods

Ingress 本身只是规则,控制器负责真正执行。

15.2 Ingress 示例

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: shop-ingress
  annotations:
    nginx.ingress.kubernetes.io/ssl-redirect: "true"
spec:
  ingressClassName: nginx
  tls:
    - hosts:
        - shop.example.com
      secretName: shop-tls
  rules:
    - host: shop.example.com
      http:
        paths:
          - path: /api/orders
            pathType: Prefix
            backend:
              service:
                name: order-service
                port:
                  number: 80
          - path: /
            pathType: Prefix
            backend:
              service:
                name: web
                port:
                  number: 80

15.3 Gateway API

Gateway API 将角色拆分为 GatewayClass、Gateway、HTTPRoute 等对象,提供更强的扩展性和权限边界:

apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
  name: order-route
spec:
  parentRefs:
    - name: shop-gateway
  hostnames:
    - shop.example.com
  rules:
    - matches:
        - path:
            type: PathPrefix
            value: /api/orders
      backendRefs:
        - name: order-service
          port: 80

15.4 控制器选择

场景 方案
HTTP 路由 NGINX Ingress、Gateway API
API 管理 APISIX、Kong 等
服务网格网关 Istio Gateway
TCP/UDP LoadBalancer 或专用控制器

15.5 常见排查

kubectl get ingress
kubectl describe ingress shop-ingress
kubectl get gateway,httproute -A
问题 排查
404 host/path/backend 匹配
502 后端 Service 或应用
证书错误 TLS Secret
不生效 controller、class
延迟高 controller 资源

本章小结

Ingress 和 Gateway API 管理南北向 HTTP 流量。路由规则只是声明,控制器实现、TLS、后端健康和资源容量决定最终效果。

思考题

  1. Ingress 和 Ingress Controller 的关系是什么?
  2. pathType 有什么影响?
  3. Gateway API 相比 Ingress 有哪些改进?
  4. 502 如何排查?
  5. TLS Secret 应如何管理?