Ingress-Nginx简介和配置样例
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.comnamespace: monitoringresourceVersion: '30006506'uid: f07bc210-2aa9-43f2-b905-b17af9d2c054
spec:defaultBackend:service:name: nginx-testport:number: 80ingressClassName: nginxrules:- host: inner.test.comhttp:paths:- backend:service:name: grafanaport:number: 3000path: /grafanapathType: Prefix- backend:service:name: prometheus-serverport:number: 9090path: /prometheuspathType: Prefix- backend:service:name: alertmanagerport:number: 9093path: /alertmanagerpathType: Prefix- backend:service:name: prometheus-prometheus-pushgatewayport:number: 9091path: /pushgatewaypathType: Prefixtls:- hosts:- inner.test.comsecretName: 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 版本匹配。