AKS环境下Nginx基于域名路由配置咨询及替代方案询问
针对你的集群服务路由需求的方案分析
最优方案:基于域名的Host匹配路由(你已知的方案)
这是当前场景下最适合的方案,理由如下:
- 完全复用现有公网静态IP的LoadBalancer,无需额外申请IP,节省成本和运维精力
- 配置逻辑简单直接,不管是用集群内的Nginx代理还是Kubernetes Ingress,仅需添加两条Host匹配规则即可
- 符合HTTP访问的常规习惯,用户访问
test.mydomain.com和mydomain.com时无需额外加端口或路径,体验顺畅 - 扩展性极强,后续新增域名或Pod,仅需补充对应的路由规则即可
配置示例
若使用集群内独立Nginx服务做代理:
server { listen 80; server_name mydomain.com; location / { proxy_pass http://new-pod-service:80; # 替换为新Pod对应的Service名称和端口 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } } server { listen 80; server_name test.mydomain.com; location / { proxy_pass http://existing-pod-service:80; # 替换为现有Pod对应的Service名称和端口 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } }
若使用Kubernetes Nginx Ingress:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: domain-based-routing spec: rules: - host: mydomain.com http: paths: - path: / pathType: Prefix backend: service: name: new-pod-service port: number: 80 - host: test.mydomain.com http: paths: - path: / pathType: Prefix backend: service: name: existing-pod-service port: number: 80
其他可选方案(仅特定场景适用,不推荐用于你的需求)
1. 基于端口的路由
给LoadBalancer配置多个端口映射,比如80端口指向现有Pod的Service,8080端口指向新Pod的Service。但这种方式存在明显问题:
- 用户访问时必须加端口号(如
mydomain.com:8080),不符合常规访问习惯,体验差 - 公网可用端口有限,后续扩展新服务会受限制
- 管理多个端口映射会增加运维复杂度
2. 基于路径的路由
用同一个域名,通过不同路径区分服务,比如mydomain.com/指向新Pod,mydomain.com/test/指向现有Pod。但这会带来额外问题:
- 可能需要修改Pod内服务的代码来适配路径前缀,否则容易出现静态资源加载失败的情况
- 不符合你要求的“test.mydomain.com对应第一个Pod”的域名映射需求
- 路径规则配置不当容易引发路由冲突
3. 新增独立LoadBalancer
给新Pod单独创建一个带公网IP的LoadBalancer。这完全是浪费资源的做法,既增加了公网IP成本,也违背了你复用现有LoadBalancer IP的初衷,完全不推荐。
总结
针对你的需求,基于域名的Host匹配路由就是最优解,没有比它更贴合、更高效的方案。其他方案要么牺牲用户体验,要么增加复杂度,要么浪费资源,都不如这个方案合适。
内容的提问来源于stack exchange,提问作者Leo
相关产品推荐
相关产品推荐

