Istio 服务网格加载项入口网关故障排除

本文介绍如何排查 Istio 服务网格加载项上用于 Azure Kubernetes 服务 (AKS) 的入口网关问题。 Istio 入口网关是基于 Envoy 的反向代理,可用于将传入流量路由到网格中的工作负荷。

对于基于 Istio 的服务网格加载项,我们提供了以下入口网关选项:

  • 使用专用 IP 地址的内部入口网关。

  • 使用可公开访问的 IP 地址的外部入口网关。

加载项部署 Istio 入口网关 Pod 和每个修订版的部署。 如果要执行 Canary 升级并在群集中安装两个控制平面修订,则可能需要对两个修订版中的多个入口网关 Pod 进行故障排除。

故障排除清单

步骤 1:确保没有防火墙或 NSG 规则阻止入口网关

验证你是否没有阻止流向入口网关的流量的防火墙或 网络安全组(NSG)规则 。 必须显式添加目标网络地址转换(DNAT)规则,以允许通过Azure 防火墙传入网关的入站流量

步骤 2:正确配置网关、虚拟服务和目标规则

为通过入口网关路由流量配置网关、虚拟服务和目标规则时,请执行以下步骤:

  1. 如果分别使用外部网关或内部网关,请确保网关资源中的入口网关选择器设置为以下文本值之一:

    • istio: aks-istio-ingressgateway-external
    • istio: aks-istio-ingressgateway-internal
  2. 请确保在网关和虚拟服务中正确设置端口。 对于网关,端口应设置为80http443用于 https。 对于虚拟服务,端口应设置为应用程序正在侦听的相应服务的端口。

  3. 验证服务是否在网关和虚拟服务的规范中 hosts 公开。 如果遇到与请求中的标头相关的 Host 问题,请尝试将包含星号通配符(“*”)的所有主机添加到允许列表,例如此示例 网关配置。 但是,我们建议不要将允许列表修改为生产实践。 此外, hosts显式配置规范。

步骤 3:修复入口网关 Pod 的运行状况

如果入口网关 Pod 崩溃或未显示在就绪状态,请验证 Istio 守护程序 (istiod) 控制平面 Pod 是否处于就绪状态。 入口网关取决于 istiod 发布准备就绪。

istiod如果 Pod 未处于就绪状态,请确保正确安装 Istio 自定义资源定义(CRDs)和 base Helm 图表。 为此,请运行以下命令:

helm ls --all --all-namespaces

你可能会看到一个更广泛的错误,即加载项安装未专门配置为入口网关。

istiod如果 Pod 正常运行,但入口网关 Pod 未响应,请检查命名空间中的aks-istio-ingress以下入口网关资源以收集详细信息:

  • Helm 发布
  • 部署
  • 服务

此外,还可以在常规 Istio 服务网格加载项故障排除中找到有关网关和 sidecar 调试的详细信息。

步骤 4:配置资源利用率

当 Istiod 的默认最小/最大副本设置和网关不足时,会出现高资源利用率。 在这种情况下,请更改 水平 Pod 自动缩放 配置。

步骤 5:排查安全入口网关问题

将外部入口网关配置为使用简单或相互 TLS 公开安全 HTTPS 服务时,请按照以下故障排除步骤作:

  1. 根据以下命令的输出验证环境变量SECURE_INGRESS_PORT_EXTERNAL的值INGRESS_HOST_EXTERNAL是否有效:

    kubectl -n aks-istio-ingress get service aks-istio-ingressgateway-external
    
  2. 检查网关控制器日志中的错误消息:

    kubectl logs -n aks-istio-ingress <gateway-service-pod>
    
  3. 验证是否已在 aks-istio-ingress 命名空间中创建机密:

    kubectl -n aks-istio-ingress get secrets
    

对于用于 Azure Kubernetes 服务 的 Istio 服务网格加载项的安全入口网关中的示例,productpage-credential应列出机密。

启用 Azure 密钥库机密提供程序加载项后,必须向 Azure 密钥库授予加载项的用户分配托管标识的访问权限。 错误地设置对 Azure 密钥库的访问权限将阻止productpage-credential创建机密。

创建SecretProviderClass资源后,为了确保机密从 Azure 密钥库同步到群集,请确保成功部署引用此资源的示例 Podsecrets-store-sync-productpage

步骤 6:自定义入口网关服务设置

加载项还支持 为 Istio 入口网关 自定义 Kubernetes 服务,以便进行某些注释和 .spec.externalTrafficPolicy 设置。 在某些情况下,更改为.spec.externalTrafficPolicyLocal有助于排查连接和网络问题,因为它保留入口网关传入请求的客户端源 IP。

备注

更改为.spec.externalTrafficPolicyLocal可能导致流量分布不平衡。 在应用此更改之前,我们建议阅读有关 保留客户端源 IP 的 Kubernetes 文档,以了解不同 externalTrafficPolicy 设置之间的权衡。

参考

第三方信息免责声明

本文中提到的第三方产品由 Microsoft 以外的其他公司提供。 Microsoft 对这些产品的性能和可靠性不作任何明示或默示担保。

第三方联系人免责声明

Microsoft 会提供第三方联系信息来帮助你查找有关本主题的其他信息。 此联系信息可能会更改,恕不另行通知。 Microsoft 不保证第三方联系信息的准确性。

联系我们寻求帮助

如果你有任何疑问或需要帮助,请创建支持请求联系 Azure 社区支持。 你还可以将产品反馈提交到 Azure 反馈社区