你当前正在访问 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,然后选择“删除”

后续步骤