你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
组织通常具有严格的安全性和合规性要求,需要对群集的出口(出站)网络流量进行监管,以消除数据外泄的风险。 默认情况下,标准 SKU Azure Kubernetes 服务 (AKS) 群集具有不受限制的出站 Internet 访问。 此级别的网络访问权限允许运行的节点和服务根据需要访问外部资源。 如果希望限制出口流量,则必须限制可访问的端口和地址数量,才能维护正常的群集维护任务。 AKS 群集的出站网络和完全限定域名(FQDN)规则的概念文档提供了 AKS 群集及其可选加载项和功能所需的终结点列表。
限制来自群集的出站流量的一种常见解决方案是使用 防火墙设备 根据防火墙规则限制流量。 当应用程序需要出站访问,但必须检查和保护出站请求时,防火墙适用。 手动配置防火墙和所需的出口规则及FQDN是一个繁琐的过程,特别是在您的唯一需求是创建一个无出站依赖的隔离AKS群集用于群集引导时。
为了降低数据外泄的风险,网络隔离群集允许在没有任何出站网络依赖项的情况下启动 AKS 群集,即使是从Microsoft项目注册表(MAR)提取群集组件/映像也是如此。 集群操作员可以逐步为每个他们希望启用的方案设置允许的出站流量。
网络隔离的群集的工作原理
下图显示了网络隔离群集依赖项之间的网络通信。
AKS 群集从 Microsoft 工件注册表 (MAR) 提取群集及其功能或加载项所需的工件。 此映像拉取让 AKS 可以提供较新版本的群集组件,并解决关键安全漏洞。 网络隔离群集尝试从连接到群集的专用 Azure 容器注册表(ACR)实例中提取这些映像和二进制文件,而不是从 MAR 拉取。 如果映像不存在,专用 ACR 会从 MAR 中拉取它们,并通过专用终结点传送它们,无需启用从群集到公共 MAR 终结点的出口。
对于与网络隔离群集关联的专用 ACR,支持以下两个选项:
AKS 管理的 ACR - AKS 会在此选项中创建、管理和协调 ACR 资源。 你无需执行任何操作。
注意
AKS 托管的 ACR 资源是在订阅中创建的。 如果删除了带有 AKS 托管 ACR(用于引导工件源)的群集, 相关资源(如 AKS 托管的 ACR、专用链接和专用终结点)也会自动删除。 如果将群集上的出站类型更改为除
none或block之外的任何类型,并将--bootstrap-artifact-source保留为Cache, 然后,不会删除相关资源。自带 (BYO) ACR - BYO ACR 选项要求创建一个在 ACR 资源和 AKS 群集之间具有专用链接的ACR。 请参阅使用 Azure 专用链接以非公开方式连接到 Azure 容器注册表,了解如何为注册表配置专用终结点。 还需要分配权限并管理群集中使用的缓存规则、专用链接和专用终结点。
注意
在删除 AKS 群集或禁用该功能后。 BYO ACR、专用链接和专用终结点不会自动删除。 如果将自定义映像和缓存规则添加到 BYO ACR,它们会在群集对帐后保留。
若要创建网络隔离群集,首先需要确保 API 服务器与节点池之间的网络流量仅保留在专用网络上,可以选择以下专用群集模式之一:
- 基于专用链接的群集 - 控制平面或 API 服务器位于 AKS 管理的 Azure 资源组中,节点池位于资源组中。 服务器与节点池可以通过 API 服务器虚拟网络中的 Azure 专用链接服务以及在 AKS 群集的子网中公开的专用终结点相互通信。
- API Server VNet 集成配置群集 - 配置了 API Server VNet 集成的群集会将 API 服务器终结点直接投影到部署 AKS 的虚拟网络中的委托子网中。 通过 API 服务器 VNet 集成,无需构建专用链接或隧道,即可在 API 服务器与群集节点之间实现网络通信。
还需要确保 AKS 群集的出口路径受到控制和限制,可以选择以下网络出站类型之一:
- 出站类型
none- 如果设置了none, AKS 不会自动配置出口路径,不需要默认路由。 它在自带 (BYO) 虚拟网络场景和托管虚拟网络场景中均受支持。 对于自带虚拟网络场景,如有需要,必须建立显式出口路径。 - 出站类型
block(预览版)-如果设置了block, AKS 配置网络规则以主动阻止来自群集的所有出口流量。 此选项对于必须限制出站连接的高度安全环境非常有用。 它在托管虚拟网络场景中受到支持。 还可以通过在自带虚拟网络场景中添加带有“”的none规则来阻止所有出口流量,从而达到类似的效果。
注意
出站类型 none 已正式发布。
出站类型 block 处于预览状态。
重要
AKS 预览功能是可选择启用的自助功能。 预览功能是“按现状”和“按可用”提供的,不包括在服务级别协议和有限保证中。 AKS 预览功能是由客户支持尽最大努力部分覆盖。 因此,这些功能并不适合用于生产。 有关详细信息,请参阅以下支持文章:
限制
Unmanaged通道不支持。- 尚不支持 Windows 节点池。
- 不支持 kubenet 网络。
谨慎
如果在网络隔离 AKS 群集中使用节点公共 IP,它将允许出站类型为 none 的出站流量。
使用需要出口的功能、加载项和扩展
对于使用 BYO ACR 的网络隔离群集:
- 如果想要使用任何需要在出站类型为“
none”的网络隔离群集中进行出站网络访问的 AKS 功能或加载项,本文档包含每个功能的出站网络要求。 此外,本文档会枚举支持专用链接集成的功能或加载项,以便从群集虚拟网络中安全连接。 建议设置专用终结点以访问这些功能。 例如,可以设置基于专用终结点的引入,以在网络隔离群集中使用托管 Prometheus(Azure Monitor 工作区)和容器见解(Log Analytics 工作区)。 如果专用链接集成不可用于任何这些功能, 然后,可以根据该功能所需的网络规则和应用程序规则,使用 用户定义的路由表和 Azure 防火墙 设置群集。 - 如果对 Azure 文件存储和 Blob 存储使用 Azure 容器存储接口 (CSI) 驱动程序,则必须使用“networkEndpointType: privateEndpoint”创建自定义存储类,请参见 Azure 文件存储类和 Azure Blob 存储类中的示例。
- 网络隔离群集尚不支持以下 AKS 群集扩展:
常见问题解答
网络隔离群集与 Azure 防火墙之间有什么区别?
网络隔离群集在整个群集启动过程中不需要任何超出 VNet 的出口流量。 网络隔离群集的出站类型为 none 或 block。 如果出站类型设置为 none,则 AKS 不会为群集设置任何出站连接,允许用户自行配置它们。 如果出站类型设置为 block,则会阻止所有出站连接。
防火墙通常会在受信任的网络和不受信任的网络(例如 Internet)之间建立屏障。 例如,Azure 防火墙可以限制基于目标的出站 HTTP 和 HTTPS 流量。 它提供对出口流量的精细控制,但同时允许你提供对包含 AKS 群集出站依赖项的 FQDN 的访问。 这是 NSGs 无法做到的事情。 例如,你可以将群集的出站类型设置为 userDefinedRouting,以强制出站流量通过防火墙,然后配置出站流量的 FQDN 限制。 在许多情况下,仍需要防火墙。 比如,你无论如何都有来自应用程序的出站流量,或者你希望控制、检查和保护群集的出站和入站流量。
总之,虽然 Azure 防火墙可用于对具有出站请求的群集定义出口限制,但网络隔离群集通过完全消除或阻止出站请求,在默认安全态势方面更进一步。
我是否需要为网络隔离群集设置任何允许列表终结点才能使其正常工作?
群集的创建和启动阶段不需要网络隔离群集的任何出站流量。 AKS 组件和加载项所需的映像是从连接到群集的专用 ACR 中拉取的,而不是通过公共终结点从 Microsoft 工件注册表 (MAR) 中拉取。
设置网络隔离群集后, 如果想要启用需要向其服务终结点发出出站请求的功能或加载项,可以将专用终结点设置为由 Azure 专用链接提供支持的服务。
是否可以手动升级包以升级节点池映像?
不建议通过访问包存储库来手动升级包。 相反,可以 手动升级 或 自动升级节点 OS 映像。 目前仅支持 NodeImage 和 None 升级通道用于网络隔离群集。
如果我将出站类型更改为“none”或“block”以外的类型,这是否仍然形成一个网络隔离群集?
网络隔离群集唯一支持的出站类型是出站类型none和block。 如果你使用任何其他出站类型,群集仍可能从关联的专用 ACR 拉取工件,但这可能会生成出口流量。