Istio 服务网格加载项入口网关故障排除
本文介绍如何排查 Istio 服务网格加载项上用于 Azure Kubernetes 服务 (AKS) 的入口网关问题。 Istio 入口网关是基于 Envoy 的反向代理,可用于将传入流量路由到网格中的工作负荷。
对于基于 Istio 的服务网格加载项,我们提供了以下入口网关选项:
使用专用 IP 地址的内部入口网关。
使用可公开访问的 IP 地址的外部入口网关。
加载项部署 Istio 入口网关 Pod 和每个修订版的部署。 如果要执行 Canary 升级并在群集中安装两个控制平面修订,则可能需要对两个修订版中的多个入口网关 Pod 进行故障排除。
故障排除清单
步骤 1:确保没有防火墙或 NSG 规则阻止入口网关
验证你是否没有阻止流向入口网关的流量的防火墙或 网络安全组(NSG)规则 。 必须显式添加目标网络地址转换(DNAT)规则,以允许通过Azure 防火墙传入网关的入站流量。
步骤 2:正确配置网关、虚拟服务和目标规则
为通过入口网关路由流量配置网关、虚拟服务和目标规则时,请执行以下步骤:
如果分别使用外部网关或内部网关,请确保网关资源中的入口网关选择器设置为以下文本值之一:
istio: aks-istio-ingressgateway-external
istio: aks-istio-ingressgateway-internal
请确保在网关和虚拟服务中正确设置端口。 对于网关,端口应设置为
80
或http
443
用于https
。 对于虚拟服务,端口应设置为应用程序正在侦听的相应服务的端口。验证服务是否在网关和虚拟服务的规范中
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 服务时,请按照以下故障排除步骤作:
根据以下命令的输出验证环境变量
SECURE_INGRESS_PORT_EXTERNAL
的值INGRESS_HOST_EXTERNAL
是否有效:kubectl -n aks-istio-ingress get service aks-istio-ingressgateway-external
检查网关控制器日志中的错误消息:
kubectl logs -n aks-istio-ingress <gateway-service-pod>
验证是否已在
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.externalTrafficPolicy
Local
有助于排查连接和网络问题,因为它保留入口网关传入请求的客户端源 IP。
备注
更改为.spec.externalTrafficPolicy
Local
可能导致流量分布不平衡。 在应用此更改之前,我们建议阅读有关 保留客户端源 IP 的 Kubernetes 文档,以了解不同 externalTrafficPolicy
设置之间的权衡。
参考
第三方信息免责声明
本文中提到的第三方产品由 Microsoft 以外的其他公司提供。 Microsoft 对这些产品的性能和可靠性不作任何明示或默示担保。
第三方联系人免责声明
Microsoft 会提供第三方联系信息来帮助你查找有关本主题的其他信息。 此联系信息可能会更改,恕不另行通知。 Microsoft 不保证第三方联系信息的准确性。
联系我们寻求帮助
如果你有任何疑问或需要帮助,请创建支持请求或联系 Azure 社区支持。 你还可以将产品反馈提交到 Azure 反馈社区。