如何在AKS Ingress中路由特定路径到AKS服务、其余到外部Azure Web App
解决AKS NGINX Ingress路由外部Azure Web App的404问题
你的问题核心出在ExternalName服务的主机头传递错误,以及Ingress转发规则未适配Azure Web App的路由逻辑,下面是具体排查和解决步骤:
1. 确认ExternalName服务配置正确性
先确保你的ExternalName服务指向Azure Web App的完整FQDN(比如yourapp.azurewebsites.net),配置示例:
apiVersion: v1 kind: Service metadata: name: external-webapp spec: type: ExternalName externalName: yourapp.azurewebsites.net
执行kubectl get service external-webapp,确认ExternalName字段与Web App的域名完全一致。
2. 修正Ingress配置(关键)
Azure Web App依赖请求的Host头识别对应站点,而NGINX Ingress默认转发ExternalName服务时不会传递正确的主机头,这是导致404的主要原因。同时要明确路径匹配规则,确保非/v2路径正确转发。
完整Ingress配置示例:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: app-ingress annotations: # 必须:指定上游主机头为Web App的FQDN nginx.ingress.kubernetes.io/upstream-vhost: "yourapp.azurewebsites.net" # 若Web App需要接收原始路径(如/v1),无需重写可忽略下面注解;如需调整路径可启用: # nginx.ingress.kubernetes.io/rewrite-target: /$1 spec: ingressClassName: nginx rules: - host: your-ingress-domain.com # 替换为你的Ingress域名 http: paths: - path: /v2 pathType: Prefix backend: service: name: internal-v2-service # 你的内部K8s服务名 port: number: 80 - path: / pathType: Prefix backend: service: name: external-webapp # 上述ExternalName服务名 port: number: 80
3. 验证与排查
- 应用配置:
kubectl apply -f your-ingress.yaml - 检查NGINX配置,确认主机头已正确设置:
kubectl exec -it <nginx-ingress-pod-name> -n <ingress-namespace> -- cat /etc/nginx/nginx.conf | grep -A 10 "yourapp.azurewebsites.net" - 用curl测试(带上Host头):
curl -H "Host: your-ingress-domain.com" https://your-ingress-ip/
额外注意点
- 若Web App绑定了自定义域名,
upstream-vhost注解需使用该自定义域名,而非默认的.azurewebsites.net域名。 - 若Web App路由需要特定路径前缀,可通过
rewrite-target注解调整转发路径,比如将/v1/*重写为/*后转发给Web App。
内容的提问来源于stack exchange,提问作者James McCorkindale
相关产品推荐
相关产品推荐

