Ingress 高级配置

Ingress 是 Kubernetes 中管理外部访问集群服务的 API 对象,通过 HTTP/HTTPS 路由规则提供负载均衡、SSL 终止和基于名称的虚拟主机等功能。Ingress 高级配置涉及多种复杂场景和功能扩展。

Ingress 架构图
graph TB
    subgraph "外部网络"
        CLIENT[客户端请求]
        DNS[DNS 解析]
    end
    
    subgraph "K8s 集群"
        subgraph "Ingress Controller"
            INGRESS[Ingress Controller
Nginx/HAProxy/Traefik] CONFIG[配置同步
监听 Ingress 资源] end subgraph "服务后端" SVC1[Service A
app1.example.com] SVC2[Service B
app2.example.com] SVC3[Service C
路径: /api] end end CLIENT --> DNS DNS --> INGRESS INGRESS --> SVC1 INGRESS --> SVC2 INGRESS --> SVC3 CONFIG --> SVC1 CONFIG --> SVC2 CONFIG --> SVC3
Ingress 高级功能

路径路由

基于 URL 路径将请求路由到不同后端服务

基于主机路由

根据 Host 头将请求路由到不同服务

TLS/SSL 终止

在 Ingress 层处理 SSL 证书和加密解密

负载均衡

通过多种算法实现请求分发

Ingress TLS/SSL 配置
# TLS 终止配置示例
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: tls-ingress
  annotations:
    nginx.ingress.kubernetes.io/ssl-redirect: "true"
    nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
spec:
  tls:
  - hosts:
    - secure.example.com
    secretName: tls-secret
  rules:
  - host: secure.example.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: web-service
            port:
              number: 80
路径重写和负载均衡配置
# 路径重写配置
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: rewrite-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /$2
    nginx.ingress.kubernetes.io/configuration-snippet: |
      proxy_set_header Accept-Encoding "";
      gzip off;
    nginx.ingress.kubernetes.io/upstream-hash-by: "$request_uri"
spec:
  rules:
  - http:
      paths:
      - path: /api(/|$)(.*)
        pathType: Prefix
        backend:
          service:
            name: api-service
            port:
              number: 8080
流量控制和限流配置
# 限流和流量控制配置
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: rate-limit-ingress
  annotations:
    nginx.ingress.kubernetes.io/rate-limit-connections: "10"
    nginx.ingress.kubernetes.io/rate-limit-requests-per-second: "5"
    nginx.ingress.kubernetes.io/custom-http-errors: "404,429,500,502,503"
    nginx.ingress.kubernetes.io/configuration-snippet: |
      limit_req_zone $binary_remote_addr zone=api:10m rate=5r/s;
      limit_req zone=api burst=10 nodelay;
spec:
  rules:
  - host: api.example.com
    http:
      paths:
      - path: /api
        pathType: Prefix
        backend:
          service:
            name: api-service
            port:
              number: 8080
Ingress Controller 配置

Ingress Controller 是实际处理路由规则的负载均衡器,常见的有 Nginx、Traefik、HAProxy 等。

# Nginx Ingress Controller 配置示例
apiVersion: v1
kind: ConfigMap
metadata:
  name: nginx-configuration
  namespace: ingress-nginx
  labels:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx
data:
  use-proxy-protocol: "false"
  use-forwarded-headers: "true"
  compute-full-forwarded-for: "true"
  forwarded-for-header: "X-Forwarded-For"
  enable-real-ip: "true"
  http-snippet: |
    map $http_x_forwarded_proto $proxy_x_forwarded_proto {
      default $http_x_forwarded_proto;
      " " $scheme;
    }
  server-snippet: |
    server_tokens off;
    location ~ /\. {
      deny all;
    }
高级 Ingress 策略对比
策略应用场景优势注意事项
路径路由单域名多服务资源利用率高路径冲突需注意
主机路由多域名服务服务隔离好需要多个域名
SSL 终止HTTPS 访问统一证书管理内部网络需额外安全措施
重定向HTTP 到 HTTPS安全访问保障避免重定向循环
限流防止过载保护后端服务合理设置阈值
Ingress 故障排查
# 检查 Ingress 状态
kubectl get ingress
# 查看 Ingress 详细信息
kubectl describe ingress <ingress-name>
# 检查 Ingress Controller 日志
kubectl logs -n ingress-nginx deployment/ingress-nginx-controller
# 测试 Ingress 规则
curl -H "Host: example.com" http://<ingress-ip>/path
# 验证 TLS 配置
openssl s_client -connect example.com:443 -servername example.com
Ingress 最佳实践
安全配置
  • 使用 HTTPS 和有效的 SSL 证书
  • 配置适当的 TLS 版本和加密套件
  • 启用 HSTS 和安全头
  • 配置适当的访问控制
性能优化
  • 合理配置负载均衡算法
  • 启用压缩和缓存
  • 配置连接池和超时
  • 监控和日志记录