基于主机名的路由配置指南
基本使用场景
ingress-nginx 可在多种云环境中使用,并支持丰富的配置选项。本节介绍一个典型场景:通过单个 ingress-nginx 负载均衡器,根据主机名将流量路由到两个不同的后端 HTTP 服务。
前置准备
- 首先按照官方文档完成 ingress-nginx 的安装
 - 假设您已有两个部署好的 HTTP 服务:
• 
myServiceA(ClusterIP 类型) •myServiceB(ClusterIP 类型) - 计划通过以下域名暴露服务:
• 
myServiceA.foo.org•myServiceB.foo.org 
配置方法
Kubernetes 1.19 以下版本配置
apiVersion: networking.k8s.io/v1beta1kind: Ingressmetadata:name: ingress-myserviceaspec:ingressClassName: nginxrules:- host: myservicea.foo.orghttp:paths:- path: /backend:serviceName: myserviceaservicePort: 80---apiVersion: networking.k8s.io/v1beta1kind: Ingressmetadata:name: ingress-myservicebannotations:kubernetes.io/ingress.class: "nginx" # 使用共享的ingress-nginxspec:rules:- host: myserviceb.foo.orghttp:paths:- path: /backend:serviceName: myservicebservicePort: 80
Kubernetes 1.19 及以上版本配置
apiVersion: networking.k8s.io/v1kind: Ingressmetadata:name: ingress-myserviceaspec:rules:- host: myservicea.foo.orghttp:paths:- path: /pathType: Prefixbackend:service:name: myserviceaport:number: 80ingressClassName: nginx---apiVersion: networking.k8s.io/v1kind: Ingressmetadata:name: ingress-myservicebspec:rules:- host: myserviceb.foo.orghttp:paths:- path: /pathType: Prefixbackend:service:name: myservicebport:number: 80ingressClassName: nginx
部署说明
- 应用上述 YAML 后,ingress-nginx 会自动发现并管理这两个 Ingress 资源
 - 注意 Ingress 资源应与后端服务位于同一命名空间
 - 在大多数云环境中,ingress-nginx 会同时创建对应的负载均衡器资源
 
DNS 配置
- 获取 ingress-nginx 的外部 IP:
kubectl get services -n ingress-nginx
 - 在 DNS 提供商处添加两条 A 记录:
• 
myservicea.foo.org→ nginx 外部 IP •myserviceb.foo.org→ nginx 外部 IP 
Minikube 测试说明
在 Minikube 环境中测试时,请参考 Kubernetes 官方文档:在 Minikube 上使用 NGINX Ingress 控制器设置 Ingress
注意事项
- 确保后端服务已正确部署且状态为 Running
 - 检查 Ingress 控制器的日志以排查路由问题:
kubectl logs -n ingress-nginx <ingress-controller-pod>
 - 如需 HTTPS 支持,需要额外配置 TLS 证书
 
