安装指南
安装 Ingress-NGINX 控制器有多种方式:
在大多数 Kubernetes 集群上,Ingress 控制器可以在无需额外配置的情况下运行。如果你想快速上手,可以参考 快速开始 部分。然而,在许多环境中,你可以通过启用额外功能来提高性能或获取更详细的日志。我们建议你查看 环境特定的安装指南,了解如何针对你的环境或云服务提供商优化 Ingress 控制器。
快速开始
✅ 使用 Helm 安装 如果你有 Helm,可以使用以下命令部署 Ingress 控制器:
helm upgrade --install ingress-nginx ingress-nginx \
--repo https://kubernetes.github.io/ingress-nginx \
--namespace ingress-nginx --create-namespace
这会将控制器安装在 ingress-nginx
命名空间中,并在该命名空间不存在时自动创建。
📌 说明
该命令是幂等的:
- 如果未安装 Ingress 控制器,则会安装它;
- 如果已安装,则会执行升级。
🔍 查看可配置参数 如果你想查看安装时可以设置的所有参数,可以运行以下命令:
helm show values ingress-nginx --repo https://kubernetes.github.io/ingress-nginx
✅ 在 AWS/GCP/Azure 等云平台上使用 Helm 安装
默认的 ingress-nginx-controller
Helm Chart 是通用安装,未针对特定云提供商配置。你需要自定义与云平台相关的注解,例如 AWS:
annotations:
service.beta.kubernetes.io/aws-load-balancer-target-group-attributes: deregistration_delay.timeout_seconds=270
service.beta.kubernetes.io/aws-load-balancer-nlb-target-type: ip
service.beta.kubernetes.io/aws-load-balancer-healthcheck-path: /healthz
service.beta.kubernetes.io/aws-load-balancer-healthcheck-port: "10254"
service.beta.kubernetes.io/aws-load-balancer-healthcheck-protocol: http
service.beta.kubernetes.io/aws-load-balancer-healthcheck-success-codes: 200-299
service.beta.kubernetes.io/aws-load-balancer-scheme: "internet-facing"
service.beta.kubernetes.io/aws-load-balancer-backend-protocol: tcp
service.beta.kubernetes.io/aws-load-balancer-cross-zone-load-balancing-enabled: "true"
service.beta.kubernetes.io/aws-load-balancer-type: nlb
✅ 使用 YAML 清单安装 如果你没有 Helm 或更喜欢使用 YAML 清单,可以运行以下命令:
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.12.1/deploy/static/provider/cloud/deploy.yaml
📌 说明
上述命令中的 YAML 清单是通过 helm template
生成的,因此你最终获得的资源几乎与使用 Helm 安装相同。
防火墙配置
查看 ingress-nginx 使用的端口,可以运行以下命令:
kubectl -n ingress-nginx get pod -o yaml
通常,你需要:
- 在运行 Kubernetes 节点的所有主机之间开放 8443 端口(用于 ingress-nginx 的准入控制器)。
- 对外开放 80(HTTP)和/或 443(HTTPS)端口,以便集群节点能够接收来自外部的流量。
本地测试
✅ 创建示例应用 先创建一个简单的 Web 服务器和关联的服务:
kubectl create deployment demo --image=httpd --port=80
kubectl expose deployment demo
✅ 创建 Ingress 资源 使用以下命令创建 Ingress 资源:
kubectl create ingress demo-localhost --class=nginx \
--rule="demo.localdev.me/*=demo:80"
✅ 端口转发 将本地端口转发到 Ingress 控制器:
kubectl port-forward --namespace=ingress-nginx service/ingress-nginx-controller 8080:80
✅ 访问示例应用
现在,你可以通过 curl
访问你的应用:
curl --resolve demo.localdev.me:8080:127.0.0.1 http://demo.localdev.me:8080
你应该能看到类似 “It works!” 的 HTML 响应。
环境特定的安装指南
本地开发集群
✅ minikube 在 minikube 中启用 Ingress 控制器:
minikube addons enable ingress
✅ MicroK8s 在 MicroK8s 中启用 Ingress 控制器:
microk8s enable ingress
✅ Docker Desktop Docker Desktop 自带 Kubernetes:
- Mac 版本:18.06.0-ce 及以上
- Windows 版本:18.06.0-ce 及以上
确认 Kubernetes 已启用:
kubectl get nodes
使用默认的 快速开始 指令安装 Ingress 控制器。
✅ Rancher Desktop 在 Rancher Desktop 中,默认使用 K3s 和 Traefik 作为 Ingress 控制器。如果要使用 NGINX,需要先禁用 Traefik:
- 首选项 → Kubernetes 菜单 → 禁用 Traefik
然后使用 快速开始 指令安装 Ingress 控制器。
云平台部署
✅ AWS 在 AWS 上,使用 NLB 暴露 Ingress 控制器:
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.12.1/deploy/static/provider/aws/deploy.yaml
✅ GCE - GKE 在 GKE 上安装:
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.12.1/deploy/static/provider/cloud/deploy.yaml
✅ Azure 在 Azure 上安装:
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.12.1/deploy/static/provider/cloud/deploy.yaml
✅ Digital Ocean 在 Digital Ocean 上安装:
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.12.1/deploy/static/provider/do/deploy.yaml
✅ 裸金属集群 在裸金属环境中安装:
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.12.1/deploy/static/provider/baremetal/deploy.yaml
🔥 至此,你已经成功安装并配置了 Ingress-NGINX 控制器!🎉