安装指南

安装 Ingress-NGINX 控制器有多种方式:

  • 使用 Helm,通过项目的仓库 Chart 进行安装;
  • 使用 kubectl apply 命令,应用 YAML 清单;
  • 使用特定的插件(例如 minikubeMicroK8s)。

在大多数 Kubernetes 集群上,Ingress 控制器可以在无需额外配置的情况下运行。如果你想快速上手,可以参考 快速开始 部分。然而,在许多环境中,你可以通过启用额外功能来提高性能或获取更详细的日志。我们建议你查看 环境特定的安装指南,了解如何针对你的环境或云服务提供商优化 Ingress 控制器。

快速开始

使用 Helm 安装 如果你有 Helm,可以使用以下命令部署 Ingress 控制器:

  1. helm upgrade --install ingress-nginx ingress-nginx \
  2. --repo https://kubernetes.github.io/ingress-nginx \
  3. --namespace ingress-nginx --create-namespace

这会将控制器安装在 ingress-nginx 命名空间中,并在该命名空间不存在时自动创建。

📌 说明
该命令是幂等的:

  • 如果未安装 Ingress 控制器,则会安装它;
  • 如果已安装,则会执行升级。

🔍 查看可配置参数 如果你想查看安装时可以设置的所有参数,可以运行以下命令:

  1. helm show values ingress-nginx --repo https://kubernetes.github.io/ingress-nginx

在 AWS/GCP/Azure 等云平台上使用 Helm 安装 默认的 ingress-nginx-controller Helm Chart 是通用安装,未针对特定云提供商配置。你需要自定义与云平台相关的注解,例如 AWS:

  1. annotations:
  2. service.beta.kubernetes.io/aws-load-balancer-target-group-attributes: deregistration_delay.timeout_seconds=270
  3. service.beta.kubernetes.io/aws-load-balancer-nlb-target-type: ip
  4. service.beta.kubernetes.io/aws-load-balancer-healthcheck-path: /healthz
  5. service.beta.kubernetes.io/aws-load-balancer-healthcheck-port: "10254"
  6. service.beta.kubernetes.io/aws-load-balancer-healthcheck-protocol: http
  7. service.beta.kubernetes.io/aws-load-balancer-healthcheck-success-codes: 200-299
  8. service.beta.kubernetes.io/aws-load-balancer-scheme: "internet-facing"
  9. service.beta.kubernetes.io/aws-load-balancer-backend-protocol: tcp
  10. service.beta.kubernetes.io/aws-load-balancer-cross-zone-load-balancing-enabled: "true"
  11. service.beta.kubernetes.io/aws-load-balancer-type: nlb

使用 YAML 清单安装 如果你没有 Helm 或更喜欢使用 YAML 清单,可以运行以下命令:

  1. 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 使用的端口,可以运行以下命令:

  1. kubectl -n ingress-nginx get pod -o yaml

通常,你需要:

  • 在运行 Kubernetes 节点的所有主机之间开放 8443 端口(用于 ingress-nginx 的准入控制器)。
  • 对外开放 80(HTTP)和/或 443(HTTPS)端口,以便集群节点能够接收来自外部的流量。

本地测试

创建示例应用 先创建一个简单的 Web 服务器和关联的服务:

  1. kubectl create deployment demo --image=httpd --port=80
  2. kubectl expose deployment demo

创建 Ingress 资源 使用以下命令创建 Ingress 资源:

  1. kubectl create ingress demo-localhost --class=nginx \
  2. --rule="demo.localdev.me/*=demo:80"

端口转发 将本地端口转发到 Ingress 控制器:

  1. kubectl port-forward --namespace=ingress-nginx service/ingress-nginx-controller 8080:80

访问示例应用 现在,你可以通过 curl 访问你的应用:

  1. curl --resolve demo.localdev.me:8080:127.0.0.1 http://demo.localdev.me:8080

你应该能看到类似 “It works!” 的 HTML 响应。


环境特定的安装指南

本地开发集群

minikube 在 minikube 中启用 Ingress 控制器:

  1. minikube addons enable ingress

MicroK8s 在 MicroK8s 中启用 Ingress 控制器:

  1. microk8s enable ingress

Docker Desktop Docker Desktop 自带 Kubernetes:

  • Mac 版本:18.06.0-ce 及以上
  • Windows 版本:18.06.0-ce 及以上

确认 Kubernetes 已启用:

  1. kubectl get nodes

使用默认的 快速开始 指令安装 Ingress 控制器。

Rancher Desktop 在 Rancher Desktop 中,默认使用 K3s 和 Traefik 作为 Ingress 控制器。如果要使用 NGINX,需要先禁用 Traefik:

  • 首选项 → Kubernetes 菜单 → 禁用 Traefik

然后使用 快速开始 指令安装 Ingress 控制器。


云平台部署

AWS 在 AWS 上,使用 NLB 暴露 Ingress 控制器:

  1. kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.12.1/deploy/static/provider/aws/deploy.yaml

GCE - GKE 在 GKE 上安装:

  1. kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.12.1/deploy/static/provider/cloud/deploy.yaml

Azure 在 Azure 上安装:

  1. kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.12.1/deploy/static/provider/cloud/deploy.yaml

Digital Ocean 在 Digital Ocean 上安装:

  1. kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.12.1/deploy/static/provider/do/deploy.yaml

裸金属集群 在裸金属环境中安装:

  1. kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.12.1/deploy/static/provider/baremetal/deploy.yaml

🔥 至此,你已经成功安装并配置了 Ingress-NGINX 控制器!🎉