You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AKS集群中Istio暴露的API无法访问:已获取外部IP及端口仍失败

排查AKS上Istio暴露API无法访问的问题

1. 确认Ingress Gateway的外部访问配置

  • 先检查Istio Ingress Gateway的Service类型与外部IP状态:

    kubectl get svc istio-ingressgateway -n istio-system
    

    确认EXTERNAL-IP为有效公网IP,且TYPE为LoadBalancer(AKS环境默认配置)。若EXTERNAL-IP显示<pending>,说明AKS负载均衡器未完成分配,需等待或检查集群是否具备创建LB的权限。

  • 验证Gateway的Selector与Ingress Gateway Pod标签是否匹配:

    kubectl get pods -n istio-system -l istio=ingress
    

    若未返回Pod,说明Selector配置错误——AKS上通过官方方式安装的Istio Ingress Gateway标签通常为istio=ingressgateway而非istio=ingress。可通过以下命令查看正确标签:

    kubectl describe pod <ingress-gateway-pod-name> -n istio-system | grep Labels
    

    随后将Gateway的selector修改为匹配的标签值。

2. 检查服务与端点状态

  • 确认productpage服务存在且端点正常:
    kubectl get svc productpage
    kubectl get endpoints productpage
    
    确保ENDPOINTS列包含Pod的IP:9080,说明后端Pod就绪,服务可正确路由至Pod。若端点为空,检查productpage的Deployment运行状态及Pod是否处于Running状态:
    kubectl get deploy productpage
    kubectl get pods -l app=productpage
    

3. 验证Istio流量规则正确性

  • 检查VirtualService与Gateway的关联是否生效:

    istioctl describe gateway bookinfo-gateway
    istioctl describe virtualservice bookinfo
    

    确认VirtualService的gateways字段包含bookinfo-gateway,且Gateway与VirtualService的hosts配置匹配(当前均为*,无问题)。

  • 检查Istio Sidecar注入状态:
    确保productpage的Pod已注入Istio Sidecar,Pod容器数量应为2个(应用容器+istio-proxy):

    kubectl get pods -l app=productpage -o jsonpath='{.items[*].spec.containers[*].name}'
    

    若未注入,检查命名空间是否开启自动注入:

    kubectl get namespace <你的命名空间> -o jsonpath='{.metadata.labels.istio-injection}'
    

    若返回enabled,重新滚动Deployment触发注入;若未开启,执行以下命令手动触发:

    kubectl rollout restart deploy productpage
    

4. 排查网络与防火墙问题

  • AKS的LoadBalancer默认会创建NSG(网络安全组),需确认NSG允许外部访问Ingress Gateway的80端口:
    登录Azure门户,找到AKS集群对应的节点资源组(通常命名为MC_<资源组>_<集群名>_<区域>),定位Ingress Gateway LB对应的NSG,添加入站规则允许任意来源访问80端口。

  • 测试集群内部访问是否正常:
    在集群内启动临时Pod,直接访问productpage服务:

    kubectl run -it --rm --image=curlimages/curl curl-test -- curl productpage:9080/productpage
    

    若内部可访问,说明问题出在Ingress Gateway到外部的网络链路;若内部也无法访问,需排查服务、Pod或Sidecar配置。

5. 查看Istio组件日志

  • 查看Ingress Gateway日志,排查流量到达后的路由错误:

    kubectl logs -n istio-system <ingress-gateway-pod-name> istio-proxy
    

    搜索productpage、404、503等关键词,定位具体路由问题。

  • 查看productpage Pod的Sidecar日志,确认流量是否到达后端:

    kubectl logs <productpage-pod-name> istio-proxy
    

内容的提问来源于stack exchange,提问作者gera1390

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 01:16:25