Kubernetes Ingress NGINX Controller 详解
什么是Kubernetes Ingress NGINX Controller
Kubernetes Ingress NGINX Controller 是一个基于 NGINX 的 Ingress 控制器,用于管理 Kubernetes 集群中服务的外部访问。它负责解析 Ingress 资源定义的反向代理规则,并将外部流量路由到集群内的服务(Service)上
通常用来做什么
- 流量路由和负载均衡:Nginx Ingress Controller 将外部流量路由到集群内的服务,并提供负载均衡功能,确保流量分配均匀
- 单一入口点:为多个服务提供一个统一的入口点,简化外部访问
- SSL/TLS 终止:支持 HTTPS 协议,实现 SSL/TLS 终止,提高安全性
- 访问控制和限速:可以配置访问控制策略和限速规则,增强安全性
什么情况下使用
- 多租户场景:在同一个 Kubernetes 集群中,为不同用户或环境部署多个 Ingress Controller,以隔离流量和配置
- 高负载场景:在需要处理大量流量的场景下,通过优化 Nginx Ingress Controller 的配置来提高性能
- 灰度发布和蓝绿发布:利用 Ingress Controller 实现灰度发布和蓝绿发布,方便应用版本更新和回滚
- 复杂路由规则:当需要根据不同的 Host、URL 路径等规则将流量路由到不同的服务时,Nginx Ingress Controller 是非常合适的选择
示例代码
下面是一个简单的 Ingress 配置示例,展示如何将流量路由到不同的服务:
text
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: example-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
部署示例
使用 Helm 部署 Nginx Ingress Controller 的步骤如下:
-
添加 Helm 仓库:
bashhelm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
-
更新 Helm 仓库:
bashhelm repo update
-
安装 Nginx Ingress Controller:
bashhelm install ingress-nginx ingress-nginx/ingress-nginx
性能优化
在高负载场景下,可以通过增加 Nginx Ingress Controller 的实例数、调整资源配额(如 CPU 和内存)来提高性能。例如:
text
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-ingress-controller
spec:
replicas: 3 # 增加实例数
selector:
matchLabels:
app: nginx-ingress
template:
metadata:
labels:
app: nginx-ingress
spec:
containers:
- name: nginx-ingress-controller
image: k8s.gcr.io/ingress-nginx/controller:v1.5.1
resources:
requests:
cpu: 200m
memory: 512Mi
limits:
cpu: 400m
memory: 1024Mi
总结
Nginx Ingress Controller 是 Kubernetes 中一个强大的工具,用于管理外部流量的路由和负载均衡。通过其灵活的配置和扩展能力,可以满足多种场景的需求,包括高负载、灰度发布等。