你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

使用应用程序网关上的 Web 应用程序防火墙保护 Azure 容器应用

在 Azure 容器应用中托管应用或微服务时,你不一定希望将它们直接发布到 Internet, 而是能希望通过反向代理公开它们。

反向代理是位于一个或多个服务前面的服务,可拦截传入流量并将其定向到适当的目标。

使用反向代理可将服务定位在支持跨领域功能的应用前面,包括:

  • 路由
  • 缓存
  • 速率限制
  • 负载均衡
  • 安全层
  • 请求筛选

本文演示如何使用 Azure 应用程序网关上的 Web 应用程序防火墙 (WAF) 来保护内部容器应用环境中的容器应用。

有关容器应用中网络概念的详细信息,请参阅 Azure 容器应用中的网络环境

先决条件

  • 具有自定义 VNet 的内部环境:有一个位于内部环境并与自定义虚拟网络集成的容器应用。 有关如何创建自定义虚拟网络集成应用的详细信息,请参阅为内部 Azure 容器应用环境提供虚拟网络

  • 安全证书:如果必须对应用程序网关使用 TLS/SSL 加密,则需要提供有效的公共证书用于绑定到应用程序网关。

检索容器应用的域

使用以下步骤检索默认域和静态 IP 的值以设置专用 DNS 区域。

  1. 在门户上资源组的“概述”窗口中,选择你的容器应用。

  2. 在容器应用资源的“概述”窗口中,选择“容器应用环境”对应的链接

  3. 在容器应用环境资源的“概述”窗口中,选择页面右上角的“JSON 视图”,以查看容器应用环境的 JSON 表示形式。

  4. 复制 defaultDomain 和 staticIp 属性的值,并将其粘贴到文本编辑器中。 在下一部分,你将使用这些值为默认域创建一个专用 DNS 区域。

创建并配置 Azure 专用 DNS 区域

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

  2. 搜索“专用 DNS 区域”,然后在搜索结果中选择“专用 DNS 区域”。

  3. 选择“创建”按钮。

  4. 输入以下值:

    设置 操作
    订阅 选择 Azure 订阅。
    资源组 选择你的容器应用的资源组。
    名称 输入在上一部分复制的容器应用环境的 defaultDomain 属性。
    资源组位置 保留为默认值。 不需要输入值,因为专用 DNS 区域是全局性的。
  5. 选择“查看 + 创建” 。 通过验证后,选择“创建”。

  6. 创建专用 DNS 区域后,选择“转到资源”。

  7. 在“概述”窗口中,选择“+记录集”以添加新记录集。

  8. 在“添加记录集”窗口中输入以下值:

    设置 操作
    名称 输入 *
    类型 选择“A-地址记录”。
    TTL 保留默认值。
    TTL 单位 保留默认值。
    IP 地址 输入在上一部分复制的容器应用环境的 staticIp 属性。
  9. 选择“确定”以创建记录集。

  10. 再次选择“+记录集”以添加另一个记录集。

  11. 在“添加记录集”窗口中输入以下值:

    设置 操作
    名称 输入 @
    类型 选择“A-地址记录”。
    TTL 保留默认值。
    TTL 单位 保留默认值。
    IP 地址 输入在上一部分复制的容器应用环境的 staticIp 属性。
  12. 选择“确定”以创建记录集。

  13. 在页面左侧的菜单中选择“虚拟网络链接”窗口。

  14. 选择“+添加”以使用以下值创建新链接:

    设置 操作
    链接名称 输入 my-custom-vnet-pdns-link。
    我知道虚拟网络的资源 ID 保留未选中状态。
    虚拟网络 选择与你的容器应用集成的虚拟网络。
    启用自动注册 保留未选中状态。
  15. 选择“确定”以创建虚拟网络链接。

创建和配置 Azure 应用程序网关

“基本信息”选项卡

  1. 在“项目详细信息”部分中输入以下值。

    设置 操作
    订阅 选择 Azure 订阅。
    资源组 选择你的容器应用的资源组。
    应用程序网关名称 输入 my-container-apps-agw。
    区域 选择预配容器应用的位置。
    选择“WAF V2”。 如果你不需要 WAF,可以使用“标准 V2”。
    启用自动缩放 保留为默认值。 对于生产环境,建议启用自动缩放。 请参阅自动缩放 Azure 应用程序网关
    可用性区域 选择“无”。 对于生产环境,建议使用可用性区域以提高可用性。
    HTTP2 保留默认值。
    WAF 策略 选择“新建”并输入 my-waf-policy 作为 WAF 策略名称。 选择“确定” 。 如果选择了“标准 V2”作为层,请跳过此步骤。
    虚拟网络 选择与你的容器应用集成的虚拟网络。
    子网 选择“管理子网配置”。 如果你希望使用某个现有的子网,请改用该子网,然后跳到“前端”部分
  2. 在“my-custom-vnet”的“子网”窗口中,选择“+子网”并输入以下值:

    设置 操作
    名称 输入 appgateway-subnet。
    子网地址范围 保留默认值。
  3. 对于其余设置,请保留默认值。

  4. 选择“保存”以创建新的子网。

  5. 关闭“子网”窗口以返回到“创建应用程序网关”窗口。

  6. 选择以下值:

    设置 操作
    子网 选择你创建的“appgateway-subnet”。
  7. 选择“下一步: 前端”以继续。

“前端”选项卡

  1. 在“前端”选项卡上输入以下值:

    设置 操作
    前端 IP 地址类型 选择“公共”。
    公共 IP 地址 选择“添加新订阅”。 输入 my-frontend 作为前端名称,然后选择“确定”

    注意

    对于应用程序网关 v2 SKU,必须有一个公共前端 IP。 可以同时使用公共和专用前端 IP 配置,但 v2 SKU 目前不支持没有公共 IP 的、仅限专用的前端 IP 配置。 有关详细信息,请阅读此文

  2. 在完成时选择“下一步:后端

“后端”选项卡

后端池用于将请求路由到适当的后端服务器。 后端池可由以下资源的任意组合构成:

  • NIC
  • 公共 IP 地址
  • 内部 IP 地址
  • 虚拟机规模集
  • 完全限定的域名 (FQDN)
  • 多租户后端,例如 Azure 应用服务和容器应用

在此示例中,你将创建一个以你的容器应用为目标的后端池。

  1. 选择“添加后端池”。

  2. 打开一个新选项卡并导航到你的容器应用。

  3. 在容器应用的“概述”窗口中,找到“应用程序 URL”并复制它。

  4. 返回到“后端”选项卡,在“添加后端池”窗口中输入以下值:

    设置 操作
    名称 输入 my-agw-backend-pool。
    添加没有目标的后端池 请选择“否”。
    目标类型 选择“IP 地址或 FQDN”。
    Target 输入复制的“容器应用应用程序 URL”并删除“https://”前缀。 此位置是你的容器应用的 FQDN。
  5. 选择“添加” 。

  6. 在“后端” 选项卡上,选择“下一步: 配置”。

配置选项卡

在“配置”选项卡上,使用路由规则连接创建的前端和后端池。

  1. 选择“添加路由规则”。 输入以下值:

    设置 操作
    名称 输入 my-agw-routing-rule。
    优先级 输入 1
  2. 在“侦听器”选项卡下输入以下值:

    设置 操作
    侦听器名称 输入 my-agw-listener。
    前端 IP 选择“公共”。
    协议 选择“HTTPS”。 如果你没有可用的证书,可以选择“HTTP”
    端口 输入 443。 如果选择“HTTP”作为协议,请输入 80 并跳到默认/自定义域部分。
    选择证书 选择“上传证书”。 如果你的证书存储在密钥保管库中,你可以选择“从密钥保管库选择证书”。
    证书名称 输入证书的名称。
    PFX 证书文件 选择有效的公共证书。
    密码 输入证书密码。

    如果你要使用默认域,请输入以下值:

    设置 操作
    侦听器类型 选择“基本”
    错误页 URL 保留为“否”

    或者,如果你要使用自定义域,请输入以下值:

    设置 操作
    侦听器类型 选择“多站点”
    主机类型 选择“单个”
    主机名 输入要使用的自定义域。
    错误页 URL 保留为“否”
  3. 选择“后端目标”选项卡并输入以下值:

  4. 切换到“后端目标”选项卡并输入以下值:

    设置 操作
    目标类型 选择之前创建的“my-agw-backend-pool”。
    后端设置 选择“添加新订阅”。
  5. 在“添加后端设置”窗口中输入以下值:

    设置 操作
    后端设置名称 输入 my-agw-backend-setting。
    后端协议 选择“HTTPS”
    后端端口 输入 443
    使用已知的 CA 证书 选择 “是”
    替代为新的主机名 请选择“是”。
    主机名替代 选择“从后端目标中选取主机名”。
    创建自定义探测 请选择“否”。
  6. 选择“添加”以添加后端设置。

  7. 在“添加路由规则”窗口中,再次选择“添加”。

  8. 在完成时选择“下一步: 标记”。

  9. 选择“下一步: 查看 + 创建”,然后选择“创建”。

可以利用专用链接与仅限内部的容器应用环境建立安全连接,因为它允许您的应用程序网关通过虚拟网络与后端的容器应用通信。

  1. 创建应用程序网关后,选择“转到资源”。

  2. 在左侧菜单中选择“专用链接”,然后选择“添加”。

  3. 输入以下值:

    设置 操作
    名称 输入 my-agw-private-link
    专用链接子网 选择要为其创建专用链接的子网。
    前端 IP 配置 选择你的应用程序网关的前端 IP。
  4. 在“专用 IP 地址设置”下,选择“添加”。

  5. 选择窗口底部的“添加”。

验证容器应用

  1. 在应用程序网关的“概述”页上找到其公共 IP 地址,或者可以搜索该地址。 若要搜索,请选择“所有资源”,然后在搜索框中输入 my-container-apps-agw-pip。 然后在搜索结果中选择 IP。

  2. 导航到应用程序网关的公共 IP 地址。

  3. 你的请求会自动路由到容器应用,后者会验证是否已成功创建应用程序网关。

清理资源

当你不再需要所创建的资源时,请删除资源组。 删除该资源组也会删除所有相关资源。

若要删除资源组,请执行以下操作:

  1. 在 Azure 门户菜单上,选择“资源组”,或搜索并选择“资源组”。

  2. 在“资源组”页上,搜索并选择“my-container-apps”。

  3. 在“资源组”页上,选择“删除资源组” 。

  4. 在“键入资源组名称”字段下输入 my-container-apps,然后选择“删除”

后续步骤