使用网络安全组保护 Azure 容器应用中的自定义 VNET
配置虚拟网络所需的网络安全组 (NSG) 与 Kubernetes 所需的设置非常相似。
可以通过具有比默认 NSG 规则更严格的规则的 NSG 锁定网络,以在订阅级别控制容器应用环境的所有入站和出站流量。
在工作负载配置文件环境中,支持用户定义路由 (UDR),并支持使用防火墙保护出站流量。 使用外部工作负载配置文件环境时,Azure 容器应用的入站流量通过受管理资源组中存在的公共 IP(而不是通过子网)进行路由。 这意味着不支持在外部工作负载配置文件环境中通过 NSG 或防火墙锁定入站流量。 有关详细信息,请参阅 Azure 容器应用环境中的网络。
在“仅限消耗”环境中,不支持自定义用户定义路由 (UDR) 和 ExpressRoute。
NSG 允许规则
下表介绍了如何配置一组 NSG 允许规则。 所需的特定规则取决于环境类型。
入站
注意
使用工作负载配置文件时,入站 NSG 规则仅适用于通过虚拟网络传递的流量。 如果容器应用设置为接受来自公共 Internet 的流量,则传入的流量通过公共终结点而不是虚拟网络来传递。
协议 | Source | 源端口 | 目标 | 目标端口 | 说明 |
---|---|---|---|---|---|
TCP | 客户端 IP | * | 容器应用的子网1 | 80 ,31080 |
使用 HTTP 时,允许客户端 IP 访问 Azure 容器应用。 31080 是容器应用环境边缘代理响应 HTTP 流量的端口。 它位于内部负载均衡器之后。 |
TCP | 客户端 IP | * | 容器应用的子网1 | 443 ,31443 |
使用 HTTPS 时,允许客户端 IP 访问 Azure 容器应用。 31443 是容器应用环境边缘代理响应 HTTPS 流量的端口。 它位于内部负载均衡器之后。 |
TCP | AzureLoadBalancer | * | 容器应用的子网 | 30000-32767 2 |
允许 Azure 负载均衡器探测后端池。 |
1 创建环境时,此地址会作为参数传递。 例如 10.0.0.0/21
。
2 创建 Azure 容器应用程序时需要完整范围,因为该范围内的端口是动态分配的。 创建之后,所需的端口是两个不可变的静态值,你可以更新 NSG 规则。
出站
协议 | Source | 源端口 | 目标 | 目标端口 | 说明 |
---|---|---|---|---|---|
TCP | 容器应用的子网 | * | MicrosoftContainerRegistry |
443 |
这是系统容器的 Azure 容器注册表的服务标记。 |
TCP | 容器应用的子网 | * | AzureFrontDoor.FirstParty |
443 |
这是 MicrosoftContainerRegistry 服务标记的依赖项。 |
任意 | 容器应用的子网 | * | 容器应用的子网 | * | 允许容器应用子网中的 IP 之间通信。 |
TCP | 容器应用的子网 | * | AzureActiveDirectory |
443 |
如果使用的是托管标识,则需要此项。 |
TCP | 容器应用的子网 | * | AzureMonitor |
443 |
仅在使用 Azure Monitor 时需要此项。 允许对 Azure Monitor 的出站调用。 |
TCP 和 UDP | 容器应用的子网 | * | 168.63.129.16 |
53 |
使环境能够使用 Azure DNS 解析主机名。 |
TCP | 容器应用的子网1 | * | 容器注册表 | 容器注册表的端口 | 与容器注册表通信需要此端口。 例如,使用 ACR 时,目标需要 AzureContainerRegistry 和 AzureActiveDirectory ,除非使用专用终结点,否则端口将是容器注册表的端口。2 |
TCP | 容器应用的子网 | * | Storage.<Region> |
443 |
仅当使用 Azure Container Registry 托管映像时才需要。 |
1 创建环境时,此地址会作为参数传递。 例如 10.0.0.0/21
。
2 如果你使用 Azure 容器注册表 (ACR) 并在虚拟网络上配置了 NSG,请在 ACR 上创建一个专用终结点,以允许 Azure 容器应用通过虚拟网络拉取映像。 配置了专用终结点时,无需为 ACR 添加 NSG 规则。
注意事项
- 如果运行的是 HTTP 服务器,则可能需要添加端口
80
和443
。 - 不要在传出 NSG 规则中显式拒绝 Azure DNS 地址
168.63.129.16
,否则容器应用环境将无法正常运行。