首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >深入解析 Kubernetes Ingress:类型、配置与最佳实践

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

作者头像
用户8589624
发布2025-11-16 08:49:16
发布2025-11-16 08:49:16
700
举报
文章被收录于专栏:nginxnginx

深入解析 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 证书。

示例配置:

代码语言:javascript
复制
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 示例:

修改 Nginx Ingress 控制器配置:

代码语言:javascript
复制
# nginx-tcp-configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: tcp-services
  namespace: ingress-nginx
data:
  3306: "default/mysql-service:3306"  # 将 3306 端口映射到 MySQL Service

更新 Ingress 控制器启动参数:

代码语言:javascript
复制
args:
  - --tcp-services-configmap=$(POD_NAMESPACE)/tcp-services

3.2 按路由规则分类
(1) 单服务 Ingress

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

代码语言:javascript
复制
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,明文转发到后端。

代码语言:javascript
复制
tls:
- hosts:
  - example.com
  secretName: tls-secret
(2) SSL 透传(Passthrough)

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

代码语言:javascript
复制
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。

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

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


4. 常见 Ingress 控制器对比

功能

Nginx

Traefik

AWS ALB

Istio

HTTP/HTTPS

TCP/UDP

动态配置

金丝雀发布

服务网格集成


5. 实战配置示例

5.1 基础 HTTP Ingress
代码语言:javascript
复制
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)
代码语言:javascript
复制
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 应用的可用性、安全性和可维护性。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-11-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 深入解析 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 Ingress
      • 5.2 金丝雀发布(Canary)
    • 6. 最佳实践
    • 7. 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档