ingress-nginx 的详细解析,涵盖其核心概念、功能、配置方式及常见使用场景

目录

1. 什么是 Ingress-Nginx?

(1) Ingress 的基本概念

 (2)​工作流程

​2. 核心组件

(1) Ingress 资源

​(2) Ingress-Nginx 控制器

​(3) ConfigMap & Secret

​3. 核心功能

​(1) 路由规则

(2) 负载均衡

​(3) SSL 终止

(4) 静态文件托管

​4. 进阶配置

​(1) 自定义 Nginx 配置

​(2) Websocket 支持

​(3) 限流与速率限制

​5. 部署与运维

监控与日志

常见问题

​6. 对比其他 Ingress 控制器

​总结


1. 什么是 Ingress-Nginx?

  • 定位ingress-nginx 是 Kubernetes 生态中最流行的 ​Ingress 控制器之一,基于 Nginx 实现,用于管理集群外部的 HTTP(S)/WebSocket 流量路由。
  • 作用
    • 将外部请求根据域名、路径等规则转发到内部服务。
    • 提供负载均衡、SSL 终止、静态文件托管、限流等 Web 服务器功能。

ingress-nginx 是 Kubernetes 中用于管理外部访问集群内服务的 ​Ingress 控制器,基于广泛使用的 Nginx 反向代理和负载均衡器。它是 Kubernetes Ingress API 的一种实现,允许通过声明式配置将 HTTP/HTTPS 流量路由到集群内的服务


(1) Ingress 的基本概念
  • Ingress:Kubernetes 资源对象,定义外部流量如何路由到集群内部服务(类似于反向代理)。
  • Ingress Controller:实际执行 Ingress 规则的组件,监听 Ingress 资源的变化并动态配置负载均衡器( Nginx)。
 (2)​工作流程
  1. 用户创建 Ingress 资源定义路由规则。
  2. ingress-nginx 控制器监听这些资源的变化。
  3. 控制器生成 Nginx 配置并热加载(不需要重启nginx)。
  4. 外部流量通过 Nginx 代理路由到后端服务。

2. 核心组件

(1) Ingress 资源

Kubernetes 的 Ingress 对象定义了流量规则,例如:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: example-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - host: www.example.com
    http:
      paths:
      - path: /app
        pathType: Prefix
        backend:
          service:
            name: app-service
            port:
              number: 80
​(2) Ingress-Nginx 控制器

部署在集群中的 Nginx Pod,监听 80 和 443 端口,动态生成 Nginx 配置文件并同步到所有 Pod。

​(3) ConfigMap & Secret
  • ConfigMap:存储全局 Nginx 配置(如日志格式、代理设置)。
  • Secret:保存敏感信息(SSL 证书、认证凭证)。

3. 核心功能

​(1) 路由规则
  • 基于 Host:不同域名指向不同服务。
  • 基于 Path:同一域名下按路径分发流量(如 /api → Service A,/blog → Service B)。
  • 支持正则表达式:匹配复杂路径模式。
(2) 负载均衡
  • 默认使用轮询(Round Robin),可通过注解配置其他算法:
    nginx.ingress.kubernetes.io/load-balance: least_conn  #最少连接数
​(3) SSL 终止
  • 支持在 Ingress 层面终止 HTTPS(需绑定 SSL 证书):
    tls:
    - hosts:
      - www.example.com
      secretName: example-tls
(4) 静态文件托管

通过 default-backend 指定静态文件目录,直接响应请求:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: static-site
spec:
  defaultBackend:
    service:
      name: nginx-static
      port:
        number: 80

4. 进阶配置

​(1) Websocket 支持

启用 WebSocket 协议并配置超时:

apiVersion: nginx.ingress.kubernetes.io/v1
kind: Ingress
metadata:
  name: mynginx
  annotations:
    nginx.ingress.kubernetes.io/websocket: "true"
    nginx.ingress.kubernetes.io/proxy-read-timeout: "86400"    
spec:
    ....
​(2) 限流与速率限制

通过 limit-rps 和 limit-burst 控制请求频率:

apiVersion: nginx.ingress.kubernetes.io/v1
kind: Ingress
metadata:
  name: rate-limit
  annotations:
    nginx.ingress.kubernetes.io/limit-rps: "5"
    nginx.ingress.kubernetes.io/limit-burst: "10"
spec:
  ...

5. 部署与运维

使用 Helm Chart:

helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm install my-ingress ingress-nginx/ingress-nginx
监控与日志
  • Metrics:暴露 Prometheus 端点(默认端口 :9101)。
  • 日志:通过 kubectl logs -n ingress-nginx <pod-name> 查看访问日志。
常见问题
  • 证书过期:更新 Secret 中的 SSL 证书。
  • 流量未转发:检查 Service 的端口和 Selector 是否匹配。
  • Nginx 配置未生效:确认注解语法正确,或通过 kubectl exec 重启 Pod。

6. 对比其他 Ingress 控制器

控制器优势劣势
Ingress-Nginx社区活跃,功能全面,文档丰富配置复杂度较高
Traefik简洁易用,自动 HTTPS生态集成较少
Istio集成服务网格,高级流量管理学习曲线陡峭,资源占用高

总结

ingress-nginx 是 Kubernetes 中处理外部流量的强大工具,适合需要灵活路由、负载均衡和安全性的场景。通过合理利用其注解、CRD 和 Secret,可以构建高效稳定的 Web 服务入口。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值