Kubernetes Nginx Ingress 概述
Nginx Ingress 是 Kubernetes 中基于 Nginx 的 Ingress 控制器,用于管理集群内外部流量的路由规则。它将外部请求路由到集群内不同的服务,支持基于域名、路径等规则的灵活配置。
Nginx Ingress 的核心组件
Ingress 资源
定义路由规则的 Kubernetes 资源对象,包括主机名、路径和后端服务的映射关系。
Nginx Ingress Controller
负责监听 Ingress 资源的变化,动态生成 Nginx 配置并重载 Nginx 服务。
Nginx
实际处理请求的反向代理服务器,由 Controller 动态配置。
安装 Nginx Ingress Controller
通过 Helm 或 YAML 文件部署 Nginx Ingress Controller。
Helm 安装
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm install ingress-nginx ingress-nginx/ingress-nginx
YAML 部署
从官方仓库下载部署文件:
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/main/deploy/static/provider/cloud/deploy.yaml
配置 Ingress 规则
基本路由规则
以下示例将 example.com 的流量路由到后端服务 my-service 的 80 端口:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: example-ingress
spec:
rules:
- host: example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: my-service
port:
number: 80
TLS 配置
为 Ingress 添加 HTTPS 支持:
spec:
tls:
- hosts:
- example.com
secretName: example-tls
常用功能与配置
路径重写
通过注解 nginx.ingress.kubernetes.io/rewrite-target 实现路径重定向:
metadata:
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /$1
负载均衡配置
通过注解调整负载均衡策略:
metadata:
annotations:
nginx.ingress.kubernetes.io/load-balance: "round_robin"
访问控制
限制 IP 或基本认证:
metadata:
annotations:
nginx.ingress.kubernetes.io/whitelist-source-range: "192.168.1.0/24"
监控与日志
启用 Prometheus 监控
通过注解暴露 metrics:
metadata:
annotations:
prometheus.io/scrape: "true"
prometheus.io/port: "10254"
查看日志
获取 Nginx Ingress Controller 日志:
kubectl logs -n ingress-nginx <ingress-controller-pod-name>
常见问题与排查
规则未生效
检查 Ingress 资源状态:
kubectl get ingress
Nginx 配置错误
查看生成的 Nginx 配置:
kubectl exec -n ingress-nginx <ingress-controller-pod-name> -- cat /etc/nginx/nginx.conf
证书问题
验证 TLS Secret 是否正确:
kubectl describe secret example-tls
性能优化
启用 HTTP/2
通过注解启用 HTTP/2:
metadata:
annotations:
nginx.ingress.kubernetes.io/http2-push-preload: "true"
调整 Worker 进程
通过 ConfigMap 配置 Nginx worker 数量:
data:
worker-processes: "4"
以上内容涵盖了 Nginx Ingress 的核心功能、配置方法和常见问题解决方案,适用于大多数 Kubernetes 环境。
5299

被折叠的 条评论
为什么被折叠?



