Kubernetes Ingress-NGINX 生产级部署配置指南
Ingress-NGINX 是 Kubernetes 集群流量管理的核心组件,提供七层负载均衡、TLS终止和路径路由等功能。本指南涵盖生产级部署、性能优化、TLS配置、安全加固和故障排查等核心内容,适用于构建企业级Kubernetes入口流量管理方案。
Ingress-NGINX 架构概述
核心功能
| 功能 | 说明 | 生产应用 |
|---|---|---|
| 七层路由 | 基于域名/路径的路由 | 微服务流量管理 |
| TLS终止 | SSL/TLS证书管理 | HTTPS服务暴露 |
| 负载均衡 | 多后端Pod流量分发 | 高可用保障 |
| 会话保持 | 基于Cookie的会话粘性 | 状态应用支持 |
| 速率限制 | 基于IP/路径的限流 | 安全防护 |
| 监控指标 | Prometheus集成 | 性能观测 |
部署模式
DaemonSet模式:每节点部署一个Pod
- 优点:性能最优,无网络跳转
- 适用:大规模生产环境
Deployment模式:指定副本数部署
- 优点:资源可控,灵活调度
- 适用:中小规模环境
拉取 Helm 包
首先,添加 ingress-nginx 官方仓库并更新仓库信息,接着拉取所需的 Helm 包。
添加 Helm 仓库
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx |
搜索并拉取指定版本的 Helm 包
helm search repo ingress-nginx/ingress-nginx -l # 查看所有版本 |
解压 Helm 包
tar xf ingress-nginx-4.8.3.tgz |
修改配置文件 values.yaml
在安装之前,您可能需要根据需求修改 values.yaml 文件,以配置 ingress-nginx 控制器的行为。常见的配置修改包括暴露 NodePort 端口。
编辑 values.yaml 文件
修改 values.yaml 文件中的 service 配置,将 type 设置为 NodePort,并配置 nodePorts。
service: |
安装 ingress-nginx 控制器
安装 ingress-nginx 控制器并创建一个 ingress-nginx 命名空间:
helm upgrade --install ingress-nginx ./ingress-nginx --namespace ingress-nginx --create-namespace |
安装完成后,您将看到类似以下输出:
Release "ingress-nginx" does not exist. Installing it now. |
配置并测试 Ingress
创建一个简单的应用服务
为测试 Ingress 控制器,首先创建一个简单的 HTTP 服务:
kubectl create deployment demo --image=httpd --port=80 |
创建 Ingress 资源
创建一个 Ingress 资源,配置一个简单的路由规则,指向刚才暴露的 demo 服务:
kubectl create ingress demo-localhost --class=nginx \ |
使用 kubectl port-forward 进行本地访问
通过 port-forward 将 Ingress 控制器暴露到本地端口:
kubectl port-forward --namespace=ingress-nginx service/ingress-nginx-controller 8080:80 |
接着,您可以通过以下方式测试:
curl --resolve demo.localdev.me:8080:127.0.0.1 http://demo.localdev.me:8080 |
您应当看到:
<html><body><h1>It works!</h1></body></html> |
配置 TLS(HTTPS)
为了启用 HTTPS,需要创建一个包含证书和私钥的 Kubernetes Secret,并在 Ingress 资源中引用该 Secret。
创建 TLS 证书
如果您没有现成的证书,可以使用 openssl 创建一个自签名证书(仅用于测试):
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout demo-tls.key -out demo-tls.crt |
这将生成 demo-tls.crt 和 demo-tls.key 文件。
创建 Kubernetes TLS Secret
使用以下命令将证书和私钥创建为 Kubernetes Secret:
kubectl create secret tls demo-tls-secret \ |
配置 Ingress 使用 TLS
编辑您的 Ingress 配置,引用刚刚创建的 demo-tls-secret:
apiVersion: networking.k8s.io/v1 |
测试 TLS 配置
在 Ingress 配置完成后,您可以通过浏览器访问 https://www.demo.io 来验证 HTTPS 是否正常工作。如果一切配置正确,您应该能够安全地访问您的服务。
配置本地 DNS(可选)
如果您希望使用自定义域名访问服务,可以修改本地 hosts 文件,将域名指向相应的 IP 地址:
echo "192.168.1.120 www.demo.io" | sudo tee -a /etc/hosts |
之后,通过浏览器访问 http://www.demo.io:30886/ 或 https://www.demo.io:30887/ 来验证服务。
总结
通过以上步骤,您成功安装并配置了 ingress-nginx 控制器,并通过 Kubernetes Secret 配置了 TLS 加密连接,确保了流量的安全传输。您还可以根据实际需求调整端口、证书和域名等配置,进一步优化您的部署。
Q & A
如何修改暴露端口?
您可以通过编辑values.yaml文件中的nodePorts配置项,来修改暴露的端口号。如何启用 TLS?
在Ingress配置文件中添加tls部分,并确保 Secret 包含有效的证书和私钥。如果使用自签名证书?
使用自签名证书时,浏览器可能会显示不受信任的警告,您可以忽略这个警告,或者在浏览器中将证书添加到信任列表。