排查与虚拟网络外部终结点的连接问题

本文讨论如何对虚拟网络外部终结点的连接进行故障排除, (即通过公共 Internet) 从 Microsoft Azure Kubernetes 服务 (AKS) 群集进行连接。

先决条件

故障排除清单

步骤 1:执行基本故障排除

确保可以连接到 Internet 上的公共终结点。 有关说明,请参阅 出站 AKS 群集连接的基本故障排除

步骤 2:确定 AKS 群集的出站类型

若要标识 AKS 群集的出站类型,请运行 az aks show 命令:

az aks show --resource-group <resource_group> --name <cluster_name> --query "networkProfile.outboundType"

如果出站类型为 loadBalancer,请确保与 AKS 节点关联的路由表具有到 Internet 的默认路由。 下表显示了详细信息。

Source 地址前缀 下一跃点类型
默认值 0.0.0.0/0 Internet

如果出站类型为 userDefinedRouting,请确保满足以下条件:

  • 可以访问 (防火墙或代理) 的出口设备。

  • 出口设备允许来自群集 的所需出站流量

    若要获取 AKS 群集允许的 FQDN 列表,请运行 az aks egress-endpoints list 命令:

    az aks egress-endpoints list --resource-group <resource_group> --name <cluster_name>
    

如果出站类型为 managedNATGateway,则通过运行 az network nat gateway show 命令检查 AKS 子网是否与 NAT 网关相关联:

az network nat gateway show --resource-group <resource_group> --name <nat_gateway_name> --query "subnets[].id"

有关如何将 NAT 网关与 AKS 结合使用的详细信息,请参阅 托管 NAT 网关

步骤 3:在连接到群集时检查cURL输出

cURL响应代码可帮助你识别问题类型。 响应代码可用后,请尝试更好地了解问题的行为方式。 有关 HTTP 状态代码和问题的基础行为的详细信息,请参阅下表。

信息源 链接
Internet 号码分配机构 (IANA) 超文本传输协议 (HTTP) 状态代码注册表
Mozilla HTTP 响应状态代码
维基 百科 HTTP 状态代码列表

以下 HTTP 状态代码可能指示列出的问题。

HTTP 状态代码 问题 示例
4xx
  1. 问题会影响客户端请求。
  2. 客户端和服务器之间存在网络阻塞程序。
  1. 请求的页面不存在,或者客户端没有访问页面的权限。
  2. 流量被网络安全组或防火墙阻止。
5xx 问题会影响服务器。 应用程序已关闭,或网关无法正常工作。

步骤 4:确定出站流量通常通过虚拟设备,但你绕过它时会发生什么情况

若要快速测试以确定出口设备 (虚拟设备是否) 导致此问题,可以暂时允许所有流量通过 Internet。 若要配置此设置,可以改为通过虚拟设备将 的默认 0.0.0.0/0 IP 地址和端口路由更改为通过 Internet。

此问题是否是间歇性的?

由于多种原因,可能会遇到间歇性出站问题。 若要排查间歇性出站连接问题,请尝试以下检查:

Pod 或节点是否耗尽了资源?

运行以下代码以检查资源的使用方式:

kubectl top pods
kubectl top nodes

操作系统磁盘是否经常使用?

若要检查操作系统磁盘是否大量使用,请执行以下步骤:

  1. Azure 门户中,搜索并选择“虚拟机规模集”。

  2. 在规模集列表中,选择用于 AKS 群集的规模集。

  3. 在规模集导航窗格中,转到 “监视 ”部分,然后选择“ 指标”。

  4. 通过查找以下字段,从 “指标 ”部分查看规模集的磁盘指标。

    字段
    范围 VMSS 名称
    指标命名空间 虚拟机主机
    度量标准 OS 和数据磁盘指标

有关指标的详细信息,请参阅 OS 磁盘和数据磁盘指标

若要查看有关磁盘利用率的 AKS 建议,请执行以下步骤:

  1. Azure 门户中,搜索并选择“Kubernetes 服务”。

  2. 在 Kubernetes 服务列表中,选择 AKS 群集的名称。

  3. 在 AKS 群集导航窗格中,转到 “监视 ”部分,然后选择“ 顾问建议”。

  4. 查看列出的有关磁盘使用情况的建议。

如果 OS 磁盘被大量使用,请考虑使用以下补救措施:

如果这些补救措施不能解决问题,请分析在磁盘上执行大量读/写操作的进程。 然后,检查是否可以将操作移动到数据磁盘而不是 OS 磁盘。

源网络地址转换端口是否耗尽?

如果应用程序进行许多出站连接,则它们可能会耗尽出站设备的 IP 地址上的可用端口数。 遵循包含指标、警报和资源运行状况的标准负载均衡器诊断,以监视现有负载均衡器的源网络地址转换 (SNAT) 端口的使用情况和分配情况。 监视以验证或确定 SNAT 端口耗尽的风险。

是否达到或超过分配的 SNAT 端口的最大数目? 在这种情况下,可以检查应用程序来确定它是否重用现有连接。 有关详细信息,请参阅 设计应用程序以高效使用连接

如果你认为应用程序配置正确,并且确实需要比默认数量的已分配端口更多的 SNAT 端口,请执行以下步骤:

  1. 增加出口设备上的公共 IP 数。 如果出口设备是负载均衡器,则可以 增加负载均衡器上的公共 IP 地址数

  2. 为 AKS 工作器节点增加每个节点的端口

第三方联系人免责声明

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

联系我们寻求帮助

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