Kubernetes Ingress 全解析:从原理到最佳实践

Kubernetes Ingress 全解析:从原理到最佳实践

一、Ingress 是什么?

Ingress 是 Kubernetes 中管理从集群外部访问内部服务的 HTTP/HTTPS 路由规则的 API 对象
它本身并不是服务类型,而是一组流量转发规则,依赖于 Ingress Controller 来实现。

与其他服务暴露方式对比

方式

类型

功能

适用场景

ClusterIP

内部访问

提供集群内虚拟 IP,仅限内部访问

微服务之间通信

NodePort

基础外部访问

每个节点上暴露端口(30000-32767)

开发/测试

LoadBalancer

云负载均衡

直接分配公网 IP,单服务直连

云环境对外服务

Ingress

HTTP/HTTPS 路由

定义规则,需 Ingress Controller 执行

统一入口网关,基于域名/路径路由多个服务

你可以把 Ingress 看作七层智能路由器网站入口网关


二、Ingress 与 Ingress Controller 的区别

  • Ingress (规则对象)
    定义“当访问某个域名+路径时,该请求应该转发到哪个 Service”。
    它只是交通规则,不会自己转发流量。
  • Ingress Controller (控制器)
    监听 Ingress 资源变化,并动态配置实际的反向代理/负载均衡器(如 Nginx、Traefik、Envoy)。
    它是交警+红绿灯,确保规则被执行。

常见 Ingress Controller

  • Ingress-Nginx (社区版)
  • Nginx Ingress Controller (官方 F5 版)
  • Traefik
  • HAProxy Ingress
  • Istio Ingress Gateway
  • 各云厂商提供的托管版(AWS ALB、GKE、AKS 等)

三、Ingress 基础示例

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: my-app-ingress
spec:
  rules:
  - host: my-app.com
    http:
      paths:
      - path: /shop
        pathType: Prefix
        backend:
          service:
            name: shop-service
            port:
              number: 80
      - path: /blog
        pathType: Prefix
        backend:
          service:
            name: blog-service
            port:
              number: 80

含义:

  • 请求 my-app.com/shop → shop-service
  • 请求 my-app.com/blog → blog-service

四、如何高效使用 Ingress?

1. 部署 Ingress Controller

以最流行的 ingress-nginx 为例:

kubectl apply -f 
  https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.8.2/deploy/static/provider/cloud/deploy.yaml

2. 编写高效的 Ingress 规则

  • 使用注解扩展功能
metadata:
  annotations:
    nginx.ingress.kubernetes.io/ssl-redirect: "true"
    nginx.ingress.kubernetes.io/proxy-connect-timeout: "30"
    nginx.ingress.kubernetes.io/enable-cors: "true"
  • 启用 TLS 证书
spec:
  tls:
  - hosts:
    - my-app.com
    secretName: my-app-tls-secret

推荐使用 cert-manager 自动申请 & 管理 Let’s Encrypt 证书。


3. 性能与可靠性

  • Ingress Controller 优化
    • 配置 CPU/内存 Requests & Limits
    • 使用 HPA 自动扩缩容
    • 节点亲和性/反亲和性,提升 HA
    • 大规模流量可思考专用节点
  • 后端服务优化
    • 配置 Readiness Probe
    • 使用 sessionAffinity: ClientIP 支持会话保持

4. 安全最佳实践

  • 使用 NetworkPolicy 限制 Ingress Controller 的访问范围
  • 默认拒绝策略,仅放行必要流量
  • 集成 WAF (如 ModSecurity)
  • 外部认证(如 OAuth2 Proxy)

5. 可观测性与日志

  • 监控
    • 开启 /metrics,用 Prometheus 采集
    • 关键指标:QPS、延迟、5xx 错误率
  • 日志
    • 收集到 ELK 或 Loki
    • 分析访问模式 & 异常流量

五、总结

高效使用 Ingress 的关键步骤:

  1. 选择合适的 Ingress Controller
  2. 为 Ingress Controller 配置资源限制、HPA 与高可用
  3. 声明式编写 Ingress 规则,合理利用注解
  4. 使用 cert-manager 自动化 TLS 管理
  5. 应用安全防护:NetworkPolicy、WAF、认证
  6. 建立可观测性体系:监控 + 日志

通过以上实践,Ingress 就能成为你 Kubernetes 集群对外流量的现代化网关入口


Kubernetes Ingress 全解析:从原理到最佳实践

© 版权声明

相关文章

1 条评论

  • 头像
    想去净净岛- 投稿者

    收藏了,感谢分享

    无记录
    回复