深入解析 Kubernetes Ingress:类型、配置与最佳实践

个人名片
在这里插入图片描述
🎓作者简介:java领域优质创作者
🌐个人主页码农阿豪
📞工作室:新空间代码工作室(提供各种软件服务)
💌个人邮箱:[2435024119@qq.com]
📱个人微信:15279484656
🌐个人导航网站www.forff.top
💡座右铭:总有人要赢。为什么不能是我呢?

  • 专栏导航:

码农阿豪系列专栏导航
面试专栏:收集了java相关高频面试题,面试实战总结🍻🎉🖥️
Spring5系列专栏:整理了Spring5重要知识点与实战演练,有案例可直接使用🚀🔧💻
Redis专栏:Redis从零到一学习分享,经验总结,案例实战💐📝💡
全栈系列专栏:海纳百川有容乃大,可能你想要的东西里面都有🤸🌱🚀

深入解析 Kubernetes Ingress:类型、配置与最佳实践

目录

  1. 引言
  2. 什么是 Kubernetes Ingress?
  3. Ingress 的核心类型
    • 3.1 按协议分类
    • 3.2 按路由规则分类
    • 3.3 按 TLS 分类
    • 3.4 按控制器实现分类
    • 3.5 特殊类型
  4. 常见 Ingress 控制器对比
  5. 实战配置示例
    • 5.1 HTTP/HTTPS Ingress
    • 5.2 TCP/UDP Ingress(Nginx 示例)
    • 5.3 Canary 发布
  6. 最佳实践与注意事项
  7. 总结

1. 引言

Kubernetes Ingress 是管理集群外部访问的核心组件,它提供了灵活的流量路由、TLS 终止和负载均衡能力。然而,Ingress 的类型和功能因控制器不同而有所差异,选择合适的 Ingress 策略对架构设计至关重要。

本文将系统介绍 Kubernetes Ingress 的不同类型、适用场景,并提供详细的配置示例,帮助读者掌握 Ingress 的高级用法。


2. 什么是 Kubernetes Ingress?

Ingress 是 Kubernetes 的一种 API 对象,用于定义外部访问集群服务的规则。它不同于 Service(仅提供内部负载均衡),而是通过 Ingress 控制器(如 Nginx、Traefik) 实现 L7 路由、SSL 卸载和域名管理。

核心功能:

  • 基于 Host 或 Path 路由请求
  • 支持 TLS 加密(HTTPS)
  • 提供 负载均衡 能力
  • 扩展功能(如流量镜像、金丝雀发布)

3. Ingress 的核心类型

3.1 按协议分类

(1) HTTP/HTTPS Ingress

最常见的类型,适用于 Web 应用。支持基于路径或域名的路由,并可配置 TLS 证书。

示例配置:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: http-ingress
spec:
  rules:
  - host: example.com
    http:
      paths:
      - path: /api
        pathType: Prefix
        backend:
          service:
            name: api-service
            port:
              number: 80
      - path: /web
        pathType: Prefix
        backend:
          service:
            name: web-service
            port:
              number: 80
  tls:
  - hosts:
    - example.com
    secretName: tls-secret  # 引用存储证书的 Secret
(2) TCP/UDP Ingress

适用于非 HTTP 服务(如 MySQL、Redis)。需通过 Ingress 控制器的扩展功能实现。

Nginx 示例:

  1. 修改 Nginx Ingress 控制器配置:
    # nginx-tcp-configmap.yaml
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: tcp-services
      namespace: ingress-nginx
    data:
      3306: "default/mysql-service:3306"  # 将 3306 端口映射到 MySQL Service
    
  2. 更新 Ingress 控制器启动参数:
    args:
      - --tcp-services-configmap=$(POD_NAMESPACE)/tcp-services
    

3.2 按路由规则分类

(1) 单服务 Ingress

直接转发所有流量到指定服务,适用于简单场景。

spec:
  defaultBackend:
    service:
      name: default-service
      port:
        number: 80
(2) 基于路径的路由

/api 转发到后端 API 服务,/static 转发到静态资源服务。

(3) 基于域名的路由

不同域名(如 a.example.comb.example.com)路由到不同服务。


3.3 按 TLS 分类

(1) TLS 终止

在 Ingress 控制器处解密 HTTPS,明文转发到后端。

tls:
- hosts:
  - example.com
  secretName: tls-secret
(2) SSL 透传(Passthrough)

加密流量直达后端(如金融类应用)。需 Nginx 或 Traefik 支持。

annotations:
  nginx.ingress.kubernetes.io/ssl-passthrough: "true"

3.4 按控制器实现分类

控制器特点
Nginx支持 HTTP/HTTPS、TCP/UDP、重写规则、Canary 发布
Traefik动态配置,支持中间件(熔断、重试)
AWS ALB深度集成 AWS,支持 ALB 特性(如 WAF、跨可用区负载均衡)
Istio基于 Gateway + VirtualService,提供高级流量管理(如 A/B 测试)

3.5 特殊类型

(1) Canary Ingress

逐步灰度发布新版本,适用于 CI/CD。

annotations:
  nginx.ingress.kubernetes.io/canary: "true"
  nginx.ingress.kubernetes.io/canary-weight: "20"  # 20% 流量到新版本
(2) 外部服务 Ingress

路由到集群外服务(类似 ExternalName Service)。


4. 常见 Ingress 控制器对比

功能NginxTraefikAWS ALBIstio
HTTP/HTTPS
TCP/UDP
动态配置
金丝雀发布
服务网格集成

5. 实战配置示例

5.1 基础 HTTP Ingress

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: web-ingress
spec:
  rules:
  - host: myapp.com
    http:
      paths:
      - path: /
        backend:
          service:
            name: frontend
            port:
              number: 80

5.2 金丝雀发布(Canary)

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: canary-ingress
  annotations:
    nginx.ingress.kubernetes.io/canary: "true"
    nginx.ingress.kubernetes.io/canary-weight: "30"
spec:
  rules:
  - host: myapp.com
    http:
      paths:
      - path: /
        backend:
          service:
            name: frontend-v2  # 30% 流量到新版本
            port:
              number: 80

6. 最佳实践

  1. 使用 HTTPS:始终配置 TLS 终止,避免明文传输。
  2. 限制访问:通过 whitelist-source-range 注解限制 IP 访问。
  3. 监控:集成 Prometheus 监控 Ingress 流量和错误率。
  4. HPA 结合:根据 Ingress 流量自动扩缩容后端 Pod。

7. 总结

Kubernetes Ingress 提供了强大的流量管理能力,但选择合适的类型和控制器至关重要。本文介绍了 HTTP/HTTPS、TCP/UDP、Canary 等常见模式,并提供了 Nginx、Traefik 的配置示例。

在实际生产环境中,建议:

  • 云环境:优先使用云厂商提供的 Ingress 控制器(如 AWS ALB)。
  • 自建集群:选择功能丰富的控制器(如 Nginx + Lua 扩展)。
  • 服务网格:考虑 Istio 实现高级流量管理。

通过合理设计 Ingress 策略,可以显著提升 Kubernetes 应用的可用性、安全性和可维护性。

posted @ 2025-05-21 10:01  性感的猴子  阅读(0)  评论(0)    收藏  举报  来源