k8s nginx ingress介绍
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.comhttp:paths:- path: /pathType: Prefixbackend:service:name: my-serviceport:number: 80
TLS 配置
为 Ingress 添加 HTTPS 支持:
spec:tls:- hosts:- example.comsecretName: 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 环境。