使用用户定义的路由控制 Azure 容器应用中的出站流量

注意

此功能仅在工作负载配置文件环境类型中受支持。

本文介绍如何将用户定义的路由 (UDR) 与 Azure 防火墙配合使用,以锁定从容器应用发送到后端 Azure 资源或其他网络资源的出站流量。

在创建虚拟网络时,Azure 将为虚拟网络创建一个默认路由表。 通过实现用户定义的路由表,可以控制流量在虚拟网络中的路由方式。 在本指南中,你将在容器应用虚拟网络上设置 UDR,以使用 Azure 防火墙限制出站流量。

除了使用 Azure 防火墙之外,你也可以使用 NAT 网关或任何其他第三方设备。

有关详细信息,请参阅在 Azure 容器应用网络使用 Azure Firewall 配置 UDR

先决条件

  • 工作负载配置文件环境:与自定义虚拟网络集成的工作负载配置文件环境。 有关详细信息,请参阅有关如何在工作负载配置文件环境中创建容器应用环境的指南

  • curl 支持:容器应用必须有一个支持 curl 命令的容器。 在本操作指南中,你将使用 curl 验证容器应用是否已正确部署。 如果你没有一个部署了 curl 的容器应用,可以部署以下支持 curlmcr.microsoft.com/k8se/quickstart:latest 的容器。

创建防火墙子网

需要创建一个名为 AzureFirewallSubnet 的子网以将防火墙部署到集成的虚拟网络中。

  1. Azure 门户中,打开与你的应用集成的虚拟网络。

  2. 在左侧菜单中选择“子网”,然后选择“+ 子网”。

  3. 输入以下值:

    设置 操作
    名称 输入 AzureFirewallSubnet。
    子网地址范围 使用默认值,或者指定 /26 或更大的子网范围
  4. 选择“保存”

部署防火墙

  1. 在 Azure 门户菜单上或在门户“主页”中,选择“创建资源”。

  2. 搜索“防火墙”。

  3. 选择“防火墙”

  4. 选择“创建”。

  5. 在“创建防火墙”页上,使用以下设置配置防火墙。

    设置 操作
    资源组 输入与集成虚拟网络相同的资源组。
    名称 输入所选的名称
    区域 选择与集成虚拟网络相同的区域。
    防火墙策略 选择“新增”创建策略。
    虚拟网络 选择集成虚拟网络。
    公共 IP 地址 选择现有地址,或选择“新增”创建地址。
  6. 选择“查看 + 创建”。 通过验证后,选择“创建”。 验证步骤可能需要几分钟才能完成。

  7. 部署完成后,选择“转到资源”。

  8. 在防火墙的“概述”页中,复制“防火墙专用 IP”。 在为虚拟网络创建路由规则时,此 IP 地址将用作下一个跃点地址。

将所有流量路由到防火墙

创建网络时,将为 Azure 中的虚拟网络配置默认路由表。 通过实现用户定义的路由表,可以控制流量在虚拟网络中的路由方式。 在以下步骤中,你将创建一个 UDR 以将所有流量路由到 Azure 防火墙。

  1. 在 Azure 门户菜单上或在门户“主页”中,选择“创建资源”。

  2. 搜索“路由表”。

  3. 选择“路由表”。

  4. 选择“创建”。

  5. 输入以下值:

    设置 操作
    区域 选择虚拟网络所在的区域。
    名称 输入名称。
    传播网关路由 请选择“否”
  6. 选择“查看 + 创建”。 通过验证后,选择“创建”。

  7. 部署完成后,选择“转到资源”。

  8. 在左侧菜单中选择“路由”,然后选择“添加”以创建新的路由表

  9. 使用以下设置配置路由表:

    设置 操作
    地址前缀 输入 0.0.0.0/0
    下一跃点类型 选择“虚拟设备”
    下一跃点地址 输入在部署防火墙中保存的“防火墙专用 IP”。
  10. 选择“添加”以创建路由。

  11. 在左侧菜单中选择“子网”,然后选择“关联”以将路由表与容器应用的子网相关联。

  12. 使用以下值配置“关联子网”:

    设置 操作
    虚拟网络 为容器应用选择虚拟网络。
    子网 为容器应用选择子网。
  13. 选择“确定” 。

配置防火墙策略

注意

在 Azure 容器应用中将 UDR 与 Azure 防火墙配合使用时,需要将某些 FQDN 和服务标记添加到防火墙的允许列表中。 请参阅使用 Azure 防火墙配置 UDR,确定所需的服务标记。

现在,来自容器应用的所有出站流量都将路由到防火墙。 防火墙目前仍然允许所有出站流量通过。 若要控制允许或拒绝哪些出站流量,需要配置防火墙策略。

  1. 在“概述”页上的“Azure 防火墙”资源中,选择“防火墙策略”

  2. 在防火墙策略页左侧的菜单中,选择“应用程序规则”。

  3. 选择“添加规则集合”。

  4. 为“规则集合”输入以下值:

    设置 操作
    名称 输入集合名称
    规则集合类型 选择“应用程序”
    Priority 输入优先级,例如 110
    规则集合操作 选择“允许”
    规则集合组 选择“DefaultApplicationRuleCollectionGroup”
  5. 在“规则”下输入以下值

    设置 操作
    名称 输入规则的名称
    源类型 选择“IP 地址”
    Source 输入 *
    协议 输入 http:80,https:443
    目标类型 选择“FQDN”
    目标 输入 mcr.microsoft.com,*.data.mcr.microsoft.com。 如果你正在使用 ACR,请添加 ACR 地址和 *.blob.core.chinacloudapi.cn
    操作 选择“允许”

    注意

    如果你正在使用 Docker Hub 注册表并想要通过防火墙访问它,则需要将以下 FQDN 添加到规则目标列表:hub.docker.com、registry-1.docker.io 和 production.cloudflare.docker.com。

  6. 选择 添加

验证防火墙是否阻止出站流量

若要验证是否正确设置了防火墙配置,可以在应用的调试控制台中使用 curl 命令。

  1. 导航到配置了 Azure 防火墙的容器应用。

  2. 在左侧菜单中选择“控制台”,然后选择支持 curl 命令的容器。

  3. 在“选择启动命令”菜单中选择“/bin/sh”,然后选择“连接”。

  4. 在控制台中运行 curl -s https://mcr.microsoft.com。 将 mcr.microsoft.com 添加到防火墙策略的允许列表后,你应会看到成功响应。

  5. 针对不符合任何目标规则的 URL(例如 example.com)运行 curl -s https://<FQDN_ADDRESS>。 示例命令为 curl -s https://example.com。 你不会收到任何响应,这表明防火墙已阻止请求。

后续步骤