适用于 Azure Kubernetes 服务 (AKS) 群集的出站网络和 FQDN 规则

本文提供了从 Azure Kubernetes 服务 (AKS) 保护出站流量的必要详细信息。 它包含基本 AKS 部署的群集要求,以及可选加载项和功能的其他要求。 可以将此信息应用于任何出站限制方法或设备。

要查看使用 Azure 防火墙的示例配置,请访问在 AKS 中使用 Azure 防火墙控制出口流量

背景

AKS 群集部署在虚拟网络上。 此网络可以由你自定义和预配置,也可以由 AKS 创建和管理。 在任一情况下,群集都对虚拟网络外部服务具有出站或流出量依赖项。

为了便于管理和操作,AKS 群集中的节点需要访问特定的端口和完全限定的域名 (FQDN)。 节点需要使用这些终结点才能与 API 服务器进行通信,或下载并安装核心 Kubernetes 群集组件和节点安全更新。 例如,群集需要从 Microsoft 容器注册表 (MCR) 请求基础系统容器映像。

AKS 出站依赖项几乎完全是使用 FQDN 定义的,不附带任何静态地址。 缺少静态地址意味着无法使用网络安全组 (NSG) 来锁定来自 AKS 群集的出站流量。

默认情况下,AKS 群集具有不受限制的出站 Internet 访问权限。 此级别的网络访问权限允许运行的节点和服务根据需要访问外部资源。 如果希望限制出口流量,则必须限制可访问的端口和地址数量,才能维护正常的群集维护任务。 保护出站地址的最简单解决方案是使用可基于域名控制出站流量的防火墙设备。 Azure 防火墙可以根据目标的 FQDN 限制出站 HTTP 和 HTTPS 流量。 还可配置首选的防火墙和安全规则,以允许所需的端口和地址。

重要

本文档仅介绍如何锁定离开 AKS 子网的流量。 默认情况下,AKS 没有入口需求。 不支持使用网络安全组 (NSG) 和防火墙阻止内部子网流量。 要控制和阻止群集中的流量,请参阅使用 AKS 中的网络策略保护 Pod 之间的流量

AKS 群集所需的出站网络规则和 FQDN

AKS 群集需要以下网络和 FQDN/应用程序规则。 如果希望配置除 Azure 防火墙以外的解决方案,则可以使用它们。

  • IP 地址依赖项适用于非 HTTP/S 流量(TCP 和 UDP 流量)。
  • 可将 FQDN HTTP/HTTPS 终结点放在防火墙设备中。
  • 通配符 HTTP/HTTPS 终结点是可以根据许多限定符随 AKS 群集一起变化的依赖项。
  • AKS 使用准入控制器将 FQDN 作为环境变量注入到 kube-system 和 gatekeeper-system 下面的所有部署中。 这可以确保节点与 API 服务器之间的所有系统通信使用 API 服务器 FQDN 而不是 API 服务器 IP。 通过使用名为 kubernetes.azure.com/set-kube-service-host-fqdn 的注释对 Pod 规范进行批注,你可以在任何名称空间中使自己的 pod 获得相同的行为。 如果存在该注释,AKS 会将 KUBERNETES_SERVICE_HOST 变量设置为 API 服务器的域名,而不是群集内服务 IP。 如果群集出口通过第 7 层防火墙,这将非常有用。
  • 如果应用或解决方案需要与 API 服务器通信,则必须添加其他网络规则,以允许与 API 服务器 IP 的端口 443 进行 TCP 通信,或者,如果配置了第 7 层防火墙以允许流量流向 API 服务器的域名,则在 Pod 规范中设置 kubernetes.azure.com/set-kube-service-host-fqdn
  • 在极少数情况下,如果存在维护操作,API 服务器 IP 可能会发生更改。 始终会提前传达可以更改 API 服务器 IP 的计划内维护操作。
  • 在某些情况下,可能需要流向“md-*.blob.storage.chinacloudapi.cn”的流量。 这种依赖是由于 Azure 托管磁盘的某些内部机制造成的。 你可能还希望使用存储服务标记
  • 你可能会注意到流向"umsa*.blob.core.chinacloudapi.cn"终结点的流量。 此终结点用于存储 Azure Linux VM 代理和扩展的清单,并会定期接受检查以下载新版本。

Azure 全球的必需网络规则

目标终结点 协议 端口 用途
*:1194
Or
ServiceTag - AzureCloud.<Region>:1194
Or
区域 CIDR - RegionCIDRs:1194
Or
APIServerPublicIP:1194 (only known after cluster creation)
UDP 1194 用于节点与控制平面之间的隧道安全通信。 对于专用群集或启用了 konnectivity-agent 的群集来说,这不是必需的。
*:9000
Or
ServiceTag - AzureCloud.<Region>:9000
Or
区域 CIDR - RegionCIDRs:9000
Or
APIServerPublicIP:9000 (only known after cluster creation)
TCP 9000 用于节点与控制平面之间的隧道安全通信。 对于专用群集或启用了 konnectivity-agent 的群集,这不是必需的。
*:123ntp.ubuntu.com:123(如果使用 Azure 防火墙网络规则) UDP 123 在 Linux 节点上进行网络时间协议 (NTP) 时间同步时需要。 对于 2021 日 3 月之后预配的节点,这不是必需的。
CustomDNSIP:53 (if using custom DNS servers) UDP 53 如果使用的是自定义 DNS 服务器,必须确保群集节点可以访问这些服务器。
APIServerPublicIP:443 (if running pods/deployments that access the API Server) TCP 443 运行访问 API 服务器的 Pod/部署时需要,这些 Pod/部署将使用 API IP。 对于专用群集,此端口不是必需的。

Azure 全球的必需 FQDN/应用程序规则

目标 FQDN 端口 用途
*.hcp.<location>.cx.prod.service.azk8s.cn HTTPS:443 Node <-> API 服务器通信时需要。 将 location> 替换为部署 AKS 群集的区域。 这对于已启用 konnectivity-agent 的群集是必需的。 Konnectivity 还使用应用程序层协议协商 (ALPN) 在代理和服务器之间进行通信。 阻止或重写 ALPN 扩展将导致失败。 对于专用群集,这不是必需的。
mcr.azk8s.cn HTTPS:443 访问 Microsoft 容器注册表 (MCR) 中的映像时需要。 此注册表包含第一方映像/图表(例如 coreDNS 等)。 这些映像是正确创建和正常运行群集所必需的,包括缩放和升级操作。
*.data.mcr.azk8s.cn, mcr-0001.mcr-msedge.net HTTPS:443 对于 Azure 内容分发网络 (CDN) 支持的 MCR 存储是必需的。
management.chinacloudapi.cn HTTPS:443 对于针对 Azure API 的 Kubernetes 操作是必需的。
login.partner.microsoftonline.cn HTTPS:443 Microsoft Entra 身份验证需要此项。
packages.microsoft.com HTTPS:443 Microsoft 包存储库使用此地址缓存 apt-get 操作。 示例包包括 Moby、PowerShell 和 Azure CLI。
acs-mirror.azureedge.net HTTPS:443 此地址用于下载和安装所需二进制文件(如 kubenet 和 Azure CNI)所需的存储库。

世纪互联运营的 Azure 的必需网络规则

目标终结点 协议 端口 用途
*:1194
Or
ServiceTag - AzureCloud.Region:1194
Or
区域 CIDR - RegionCIDRs:1194
Or
APIServerPublicIP:1194 (only known after cluster creation)
UDP 1194 用于节点与控制平面之间的隧道安全通信。
*:9000
Or
ServiceTag - AzureCloud.<Region>:9000
Or
区域 CIDR - RegionCIDRs:9000
Or
APIServerPublicIP:9000 (only known after cluster creation)
TCP 9000 用于节点与控制平面之间的隧道安全通信。
*:22
Or
ServiceTag - AzureCloud.<Region>:22
Or
区域 CIDR - RegionCIDRs:22
Or
APIServerPublicIP:22 (only known after cluster creation)
TCP 22 用于节点与控制平面之间的隧道安全通信。
*:123ntp.ubuntu.com:123(如果使用 Azure 防火墙网络规则) UDP 123 在 Linux 节点上进行网络时间协议 (NTP) 时间同步时需要。
CustomDNSIP:53 (if using custom DNS servers) UDP 53 如果使用的是自定义 DNS 服务器,必须确保群集节点可以访问这些服务器。
APIServerPublicIP:443 (if running pods/deployments that access the API Server) TCP 443 运行访问 API 服务器的 Pod/部署时需要,这些 Pod/部署将使用 API IP。

世纪互联运营的 Azure 需要的 FQDN /应用程序规则

目标 FQDN 端口 用途
*.hcp.<location>.cx.prod.service.azk8s.cn HTTPS:443 Node <-> API 服务器通信时需要。 将 location> 替换为部署 AKS 群集的区域。
*.tun.<location>.cx.prod.service.azk8s.cn HTTPS:443 Node <-> API 服务器通信时需要。 将 location> 替换为部署 AKS 群集的区域。
mcr.azk8s.cn HTTPS:443 访问 Microsoft 容器注册表 (MCR) 中的映像时需要。 此注册表包含第一方映像/图表(例如 coreDNS 等)。 这些映像是正确创建和正常运行群集所必需的,包括缩放和升级操作。
.data.mcr.azk8s.cn HTTPS:443 对于 Azure 内容分发网络 (CDN) 支持的 MCR 存储是必需的。
management.chinacloudapi.cn HTTPS:443 对于针对 Azure API 的 Kubernetes 操作是必需的。
login.chinacloudapi.cn HTTPS:443 Microsoft Entra 身份验证需要此项。
packages.microsoft.com HTTPS:443 Microsoft 包存储库使用此地址缓存 apt-get 操作。 示例包包括 Moby、PowerShell 和 Azure CLI。
*.azk8s.cn HTTPS:443 此地址用于下载和安装所需二进制文件(如 kubenet 和 Azure CNI)所需的存储库。

以下 FQDN/应用程序规则不是必需的,但建议用于 AKS 群集:

目标 FQDN 端口 用途
security.ubuntu.com, azure.archive.ubuntu.com, changelogs.ubuntu.com HTTP:80 此地址允许 Linux 群集节点下载必需的安全修补程序和更新。

如果选择阻止/不允许这些 FQDN,则仅当进行节点映像升级群集升级时,节点才会接收 OS 更新。 请记住,节点映像升级还附带更新的包,其中包括安全修补程序。

已启用 GPU 的 AKS 群集需要 FQDN/应用程序规则

目标 FQDN 端口 用途
nvidia.github.io HTTPS:443 此地址用于在基于 GPU 的节点上进行正确的驱动程序安装和操作。
us.download.nvidia.com HTTPS:443 此地址用于在基于 GPU 的节点上进行正确的驱动程序安装和操作。
download.docker.com HTTPS:443 此地址用于在基于 GPU 的节点上进行正确的驱动程序安装和操作。

基于 Windows Server 的节点池需要 FQDN/应用程序规则

目标 FQDN 端口 用途
onegetcdn.azureedge.net, go.microsoft.com HTTPS:443 安装与 windows 相关的二进制文件
*.mp.microsoft.com, www.msftconnecttest.com, ctldl.windowsupdate.com HTTP:80 安装与 windows 相关的二进制文件

如果选择阻止/不允许这些 FQDN,则仅当进行节点映像升级群集升级时,节点才会接收 OS 更新。 请记住,节点映像升级还附带更新的包,其中包括安全修补程序。

AKS 加载项和集成

适用于容器的 Microsoft Defender

必需的 FQDN/应用程序规则

FQDN 端口 用途
login.chinacloudapi.cn HTTPS:443 对于 Active Directory 身份验证是必需的。
*.ods.opinsights.azure.com HTTPS:443 Microsoft Defender 需要该规则才能将安全事件上传到云。
*.oms.opinsights.azure.com HTTPS:443 LogAnalytics 工作区需要该规则才能进行身份验证。

CSI 机密存储

必需的 FQDN/应用程序规则

FQDN 端口 用途
vault.azure.cn HTTPS:443 CSI 机密存储加载项 pod 需要使用此端口来与 Azure 密钥保管库服务器通信。

用于容器的 Azure Monitor

可通过两个选项提供对适用于容器的 Azure Monitor 的访问权限:

  • 允许使用 Azure Monitor ServiceTag
  • 提供对所需 FQDN/应用程序规则的访问权限。

必需的网络规则

目标终结点 协议 端口 用途
ServiceTag - AzureMonitor:443 TCP 443 此终结点用于将指标数据和日志发送到 Azure Monitor 和 Log Analytics。

必需的 FQDN/应用程序规则

FQDN 端口 使用
dc.services.visualstudio.com HTTPS:443 此终结点由用于容器代理遥测的 Azure Monitor 使用。
*.ods.opinsights.azure.com HTTPS:443 Azure Monitor 使用此终结点来引入日志分析数据。
*.oms.opinsights.azure.com HTTPS:443 此终结点由 omsagent 使用,用于对日志分析服务进行身份验证。
*.monitoring.azure.com HTTPS:443 此终结点用于将指标数据发送到 Azure Monitor。
<cluster-region-name>.ingest.monitor.azure.com HTTPS:443 此终结点由 Azure Monitor 适用于 Prometheus 的托管服务指标引入使用。
<cluster-region-name>.handler.control.monitor.azure.com HTTPS:443 此终结点用于提取特定群集的数据收集规则。

世纪互联运营的 Azure 需要的 FQDN /应用程序规则

FQDN 端口 使用
dc.services.visualstudio.cn HTTPS:443 此终结点由用于容器代理遥测的 Azure Monitor 使用。
*.ods.opinsights.azure.cn HTTPS:443 Azure Monitor 使用此终结点来引入日志分析数据。
*.oms.opinsights.azure.cn HTTPS:443 此终结点由 omsagent 使用,用于对日志分析服务进行身份验证。
global.handler.control.monitor.azure.cn HTTPS:443 Azure Monitor 使用此终结点来访问控制服务。
<cluster-region-name>.handler.control.monitor.azure.cn HTTPS:443 此终结点用于提取特定群集的数据收集规则。

Azure Policy

必需的 FQDN/应用程序规则

FQDN 端口 用途
data.policy.core.windows.net HTTPS:443 此地址用于拉取 Kubernetes 策略,并向策略服务报告群集合规性状态。
store.policy.core.windows.net HTTPS:443 此地址用于拉取内置策略的 Gatekeeper 项目。
dc.services.visualstudio.com HTTPS:443 Azure Policy 加载项,用于向应用程序见解终结点发送遥测数据。

世纪互联运营的 Azure 需要的 FQDN /应用程序规则

FQDN 端口 用途
data.policy.azure.cn HTTPS:443 此地址用于拉取 Kubernetes 策略,并向策略服务报告群集合规性状态。
store.policy.azure.cn HTTPS:443 此地址用于拉取内置策略的 Gatekeeper 项目。

注意

核心要求涵盖了此处未明确说明的任何加载项。

后续步骤

通过学习这篇文章,了解了要限制群集的出口流量时可以使用的端口和地址。

如果想要限制 Pod 在彼此之间如何通信以及群集内的东-西流量限制,请参阅在 AKS 中使用网络策略保护 Pod 之间的流量