基于主机名的路由配置指南
基本使用场景
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/v1beta1
kind: Ingress
metadata:
name: ingress-myservicea
spec:
ingressClassName: nginx
rules:
- host: myservicea.foo.org
http:
paths:
- path: /
backend:
serviceName: myservicea
servicePort: 80
---
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: ingress-myserviceb
annotations:
kubernetes.io/ingress.class: "nginx" # 使用共享的ingress-nginx
spec:
rules:
- host: myserviceb.foo.org
http:
paths:
- path: /
backend:
serviceName: myserviceb
servicePort: 80
Kubernetes 1.19 及以上版本配置
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ingress-myservicea
spec:
rules:
- host: myservicea.foo.org
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: myservicea
port:
number: 80
ingressClassName: nginx
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ingress-myserviceb
spec:
rules:
- host: myserviceb.foo.org
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: myserviceb
port:
number: 80
ingressClassName: 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 证书