Ingress-Nginx 是 Kubernetes 中一个基于 Nginx 的 Ingress 控制器,用于管理对集群内服务的 HTTP/HTTPS 访问。它是 Kubernetes Ingress 资源的实现之一,通过配置 Nginx 反向代理和负载均衡器,提供路由规则、SSL/TLS 终止、路径重写等高级功能。
核心功能
路由规则
根据域名、路径将请求路由到不同的后端服务(Service)。
支持基于路径(
path
)或主机名(host
)的路由。
负载均衡
自动将流量分发到多个 Pod,支持轮询、加权轮询等算法。
SSL/TLS 终止
支持 HTTPS 加密,可通过 Kubernetes Secret 配置证书。
支持自动证书续签(与
cert-manager
集成)。
高级特性
路径重写:修改请求路径(如
/api/
重写到后端服务的/
)。流量控制:限速、黑白名单、连接数限制。
自定义注解:通过注解(Annotations)配置 Nginx 行为(如缓存、CORS)。
监控与日志
集成 Prometheus 指标导出。
支持访问日志和错误日志配置。
架构组成
Ingress 资源:Kubernetes 定义的规则(YAML 文件),描述路由和后端服务的映射。
Ingress-Nginx Controller:
监听 Ingress 资源变化,动态生成 Nginx 配置。
以 Pod 形式运行在集群内或作为外部负载均衡器(如云厂商的 LoadBalancer)。
配置
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: inner.test.com
namespace: monitoring
resourceVersion: '30006506'
uid: f07bc210-2aa9-43f2-b905-b17af9d2c054
spec:
defaultBackend:
service:
name: nginx-test
port:
number: 80
ingressClassName: nginx
rules:
- host: inner.test.com
http:
paths:
- backend:
service:
name: grafana
port:
number: 3000
path: /grafana
pathType: Prefix
- backend:
service:
name: prometheus-server
port:
number: 9090
path: /prometheus
pathType: Prefix
- backend:
service:
name: alertmanager
port:
number: 9093
path: /alertmanager
pathType: Prefix
- backend:
service:
name: prometheus-prometheus-pushgateway
port:
number: 9091
path: /pushgateway
pathType: Prefix
tls:
- hosts:
- inner.test.com
secretName: test.com
grafana需要修改的配置文件
grafana.ini
[analytics]
check_for_updates = true
[grafana_net]
url = https://inner.test.com
[log]
mode = console
[paths]
data = /var/lib/grafana/
logs = /var/log/grafana
plugins = /var/lib/grafana/plugins
provisioning = /etc/grafana/provisioning
[server]
domain = "inner.baiwutong.com" # 双引号包裹更规范
serve_from_sub_path = true # 新增:启用子路径模式
root_url = https://inner.test.com/grafana
prometheus需要修改的配置文件
--storage.tsdb.retention.time=15d --config.file=/etc/config/prometheus.yml --storage.tsdb.path=/data --web.console.libraries=/etc/prometheus/console_libraries --web.console.templates=/etc/prometheus/consoles --web.enable-lifecycle --web.external-url=/prometheus --web.route-prefix=/prometheus
alertmanager需要修改的配置文件
#baseURL: ""
baseURL: "https://inner.test.com/alertmanager" # 完整外部访问 URL
pushgateway需要修改的配置文件
/bin/pushgateway --web.external-url=/pushgateway
优势
高性能:基于 Nginx,处理高并发流量。
灵活性:通过注解支持大量自定义配置。
社区支持:Kubernetes 官方维护,文档和生态完善。
适用场景
需要对外暴露多个服务的 Kubernetes 集群。
统一管理 HTTPS 证书和路由规则。
实现蓝绿部署、A/B 测试等流量分发策略。
注意事项
性能调优:需根据流量调整 Nginx 参数(如
worker_processes
)。安全:限制敏感注解的使用,避免配置错误导致的安全风险。
版本兼容性:确保 Ingress-Nginx 版本与 Kubernetes 版本匹配。