Ingress与IngressController的关系
✅ 一、Ingress 与 Ingress Controller 的关系
| 概念 | 说明 |
|---|---|
| Ingress(资源对象) | 是 Kubernetes 的一种 API 资源,用来定义外部请求如何路由到集群内部的服务(类似一个规则)。 |
| Ingress Controller(控制器) | 是一个实际运行的程序,比如 nginx-ingress-controller,它会监听 Ingress 资源,并配置反向代理(如 NGINX)来实现访问规则。 |
🧠 你可以理解为:
Ingress是“规则”,Ingress Controller是“执行规则的人”。
✅ 二、部署 nginx-ingress controller(最常见控制器)
✅ 方法一:用 Helm 安装(推荐)
如果你的集群能联网,直接执行:
1 | # 添加官方 Helm 仓库 |
这个会:
- 在
ingress-nginx命名空间中安装 ingress controller - 自动创建 Deployment、Service、RBAC、ConfigMap 等资源
安装后会启动一个 NGINX Pod,在每次你创建 Ingress 资源时自动应用规则。
✅ 方法二:使用 YAML 方式(不需要 Helm)
执行命令:
1 | kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.10.0/deploy/static/provider/cloud/deploy.yaml |
如果你是裸金属(物理机),请用这个版本:
1 | kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.10.0/deploy/static/provider/baremetal/deploy.yaml |
✅ 三、部署好后如何使用 Ingress
以下是一个完整示例:
1. 创建一个服务(例如 nginx)
1 | apiVersion: v1 |
2. 创建一个 Ingress 资源
1 | apiVersion: networking.k8s.io/v1 |
3. 访问方式
你需要将
myapp.example.com解析到 ingress controller 的 IP(NodePort、LoadBalancer、或 host 网络)比如:
1
curl -H "Host: myapp.example.com" http://<IngressControllerIP>
✅ 总结(一句话记住)
Ingress定义规则:访问哪个域名/路径,去哪个 Service。Ingress Controller是控制器,执行这些规则(如 nginx-ingress)。- 你必须先安装 Ingress Controller,然后再创建 Ingress 资源,才能生效。
如果你是 离线环境、裸金属服务器,或需要 NodePort 替代 LoadBalancer 的方式部署