1. Kubernetes服务发现:Ingress全实战指南
在Kubernetes集群中,服务发现是一个至关重要的功能。当我们完成了Pod部署、应用管理、持久化存储和配置管理后,接下来面临的核心挑战就是:如何优雅地暴露集群内部服务给外部用户?这正是Ingress要解决的关键问题。
1.1 为什么需要Ingress?
在传统的Service方案中,我们通常使用NodePort或LoadBalancer类型来暴露服务。但这种方式存在几个明显的局限性:
- 端口管理混乱:每个服务都需要占用一个独立端口,随着服务数量增加,端口管理变得异常困难
- 缺乏统一入口:用户需要记住不同服务的IP和端口,体验极差
- 路由功能缺失:无法基于路径或域名进行智能路由
- HTTPS配置复杂:需要在每个服务中单独配置SSL证书
Ingress的出现完美解决了这些问题,它提供了:
- 统一的访问入口
- 基于路径/域名的路由规则
- 集中式的HTTPS管理
- 负载均衡能力
1.2 Ingress核心架构
Ingress的实现包含三个核心组件:
- Ingress资源:定义路由规则的Kubernetes对象
- Ingress Controller:实际执行路由规则的控制器
- Ingress Class:用于关联Ingress和特定Controller
这种架构设计实现了关注点分离:开发人员通过Ingress资源声明路由需求,而运维人员负责部署和维护Ingress Controller。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 部署Nginx Ingress Controller
2.1 环境准备
在开始部署前,请确保:
- Kubernetes集群版本≥1.19
- 具备kubectl管理权限
- 网络插件已正确配置
建议为Ingress Controller创建独立的命名空间:
bash复制kubectl create namespace ingress-nginx
2.2 部署Nginx Ingress Controller
官方提供了多种部署方式,我们选择最通用的部署方案:
bash复制kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.8.2/deploy/static/provider/cloud/deploy.yaml
部署完成后,检查组件状态:
bash复制kubectl get pods -n ingress-nginx
kubectl get svc -n ingress-nginx
2.3 本地环境特殊配置
在本地开发环境(如Minikube、Docker Desktop)中,需要调整Service类型:
bash复制kubectl edit svc ingress-nginx-controller -n ingress-nginx
将spec.type从LoadBalancer改为NodePort,保存后查看分配的端口:
bash复制kubectl get svc -n ingress-nginx
2.4 验证部署
通过简单请求验证Controller是否正常工作:
bash复制curl http://<节点IP>:<NodePort>
预期看到404响应,这表示Controller已就绪但尚未配置路由规则。
3. 配置Ingress路由规则
3.1 准备示例应用
我们先部署两个测试应用:
yaml复制# nginx-deploy.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deploy
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
ap
