你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
使用应用程序网关上的 Web 应用程序防火墙保护 Azure 容器应用
在 Azure 容器应用中托管应用或微服务时,你不一定希望将它们直接发布到 Internet, 而是能希望通过反向代理公开它们。
反向代理是位于一个或多个服务前面的服务,可拦截传入流量并将其定向到适当的目标。
使用反向代理可将服务定位在支持跨领域功能的应用前面,包括:
- 路由
- 缓存
- 速率限制
- 负载均衡
- 安全层
- 请求筛选
本文演示如何使用 Azure 应用程序网关上的 Web 应用程序防火墙 (WAF) 来保护内部容器应用环境中的容器应用。
有关容器应用中网络概念的详细信息,请参阅 Azure 容器应用中的网络环境。
先决条件
具有自定义 VNet 的内部环境:有一个位于内部环境并与自定义虚拟网络集成的容器应用。 有关如何创建自定义虚拟网络集成应用的详细信息,请参阅为内部 Azure 容器应用环境提供虚拟网络。
安全证书:如果必须对应用程序网关使用 TLS/SSL 加密,则需要提供有效的公共证书用于绑定到应用程序网关。
检索容器应用的域
使用以下步骤检索默认域和静态 IP 的值以设置专用 DNS 区域。
在门户上资源组的“概述”窗口中,选择你的容器应用。
在容器应用资源的“概述”窗口中,选择“容器应用环境”对应的链接
在容器应用环境资源的“概述”窗口中,选择页面右上角的“JSON 视图”,以查看容器应用环境的 JSON 表示形式。
复制 defaultDomain 和 staticIp 属性的值,并将其粘贴到文本编辑器中。 在下一部分,你将使用这些值为默认域创建一个专用 DNS 区域。
创建并配置 Azure 专用 DNS 区域
在 Azure 门户菜单上或在门户“主页”中,选择“创建资源”。
搜索“专用 DNS 区域”,然后在搜索结果中选择“专用 DNS 区域”。
选择“创建”按钮。
输入以下值:
设置 操作 订阅 选择 Azure 订阅。 资源组 选择你的容器应用的资源组。 名称 输入在上一部分复制的容器应用环境的 defaultDomain 属性。 资源组位置 保留为默认值。 不需要输入值,因为专用 DNS 区域是全局性的。 选择“查看 + 创建” 。 通过验证后,选择“创建”。
创建专用 DNS 区域后,选择“转到资源”。
在“概述”窗口中,选择“+记录集”以添加新记录集。
在“添加记录集”窗口中输入以下值:
设置 操作 名称 输入 *。 类型 选择“A-地址记录”。 TTL 保留默认值。 TTL 单位 保留默认值。 IP 地址 输入在上一部分复制的容器应用环境的 staticIp 属性。 选择“确定”以创建记录集。
再次选择“+记录集”以添加另一个记录集。
在“添加记录集”窗口中输入以下值:
设置 操作 名称 输入 @。 类型 选择“A-地址记录”。 TTL 保留默认值。 TTL 单位 保留默认值。 IP 地址 输入在上一部分复制的容器应用环境的 staticIp 属性。 选择“确定”以创建记录集。
在页面左侧的菜单中选择“虚拟网络链接”窗口。
选择“+添加”以使用以下值创建新链接:
设置 操作 链接名称 输入 my-custom-vnet-pdns-link。 我知道虚拟网络的资源 ID 保留未选中状态。 虚拟网络 选择与你的容器应用集成的虚拟网络。 启用自动注册 保留未选中状态。 选择“确定”以创建虚拟网络链接。
创建和配置 Azure 应用程序网关
“基本信息”选项卡
在“项目详细信息”部分中输入以下值。
设置 操作 订阅 选择 Azure 订阅。 资源组 选择你的容器应用的资源组。 应用程序网关名称 输入 my-container-apps-agw。 区域 选择预配容器应用的位置。 层 选择“WAF V2”。 如果你不需要 WAF,可以使用“标准 V2”。 启用自动缩放 保留为默认值。 对于生产环境,建议启用自动缩放。 请参阅自动缩放 Azure 应用程序网关。 可用性区域 选择“无”。 对于生产环境,建议使用可用性区域以提高可用性。 HTTP2 保留默认值。 WAF 策略 选择“新建”并输入 my-waf-policy 作为 WAF 策略名称。 选择“确定” 。 如果选择了“标准 V2”作为层,请跳过此步骤。 虚拟网络 选择与你的容器应用集成的虚拟网络。 子网 选择“管理子网配置”。 如果你希望使用某个现有的子网,请改用该子网,然后跳到“前端”部分。 在“my-custom-vnet”的“子网”窗口中,选择“+子网”并输入以下值:
设置 操作 名称 输入 appgateway-subnet。 子网地址范围 保留默认值。 对于其余设置,请保留默认值。
选择“保存”以创建新的子网。
关闭“子网”窗口以返回到“创建应用程序网关”窗口。
选择以下值:
设置 操作 子网 选择你创建的“appgateway-subnet”。 选择“下一步: 前端”以继续。
“前端”选项卡
在“前端”选项卡上输入以下值:
设置 操作 前端 IP 地址类型 选择“公共”。 公共 IP 地址 选择“添加新订阅”。 输入 my-frontend 作为前端名称,然后选择“确定” 注意
对于应用程序网关 v2 SKU,必须有一个公共前端 IP。 可以同时使用公共和专用前端 IP 配置,但 v2 SKU 目前不支持没有公共 IP 的、仅限专用的前端 IP 配置。 有关详细信息,请阅读此文。
在完成时选择“下一步:后端。
“后端”选项卡
后端池用于将请求路由到适当的后端服务器。 后端池可由以下资源的任意组合构成:
- NIC
- 公共 IP 地址
- 内部 IP 地址
- 虚拟机规模集
- 完全限定的域名 (FQDN)
- 多租户后端,例如 Azure 应用服务和容器应用
在此示例中,你将创建一个以你的容器应用为目标的后端池。
选择“添加后端池”。
打开一个新选项卡并导航到你的容器应用。
在容器应用的“概述”窗口中,找到“应用程序 URL”并复制它。
返回到“后端”选项卡,在“添加后端池”窗口中输入以下值:
设置 操作 名称 输入 my-agw-backend-pool。 添加没有目标的后端池 请选择“否”。 目标类型 选择“IP 地址或 FQDN”。 Target 输入复制的“容器应用应用程序 URL”并删除“https://”前缀。 此位置是你的容器应用的 FQDN。 选择“添加” 。
在“后端” 选项卡上,选择“下一步: 配置”。
配置选项卡
在“配置”选项卡上,使用路由规则连接创建的前端和后端池。
选择“添加路由规则”。 输入以下值:
设置 操作 名称 输入 my-agw-routing-rule。 优先级 输入 1。 在“侦听器”选项卡下输入以下值:
设置 操作 侦听器名称 输入 my-agw-listener。 前端 IP 选择“公共”。 协议 选择“HTTPS”。 如果你没有可用的证书,可以选择“HTTP” 端口 输入 443。 如果选择“HTTP”作为协议,请输入 80 并跳到默认/自定义域部分。 选择证书 选择“上传证书”。 如果你的证书存储在密钥保管库中,你可以选择“从密钥保管库选择证书”。 证书名称 输入证书的名称。 PFX 证书文件 选择有效的公共证书。 密码 输入证书密码。 如果你要使用默认域,请输入以下值:
设置 操作 侦听器类型 选择“基本” 错误页 URL 保留为“否” 或者,如果你要使用自定义域,请输入以下值:
设置 操作 侦听器类型 选择“多站点” 主机类型 选择“单个” 主机名 输入要使用的自定义域。 错误页 URL 保留为“否” 选择“后端目标”选项卡并输入以下值:
切换到“后端目标”选项卡并输入以下值:
设置 操作 目标类型 选择之前创建的“my-agw-backend-pool”。 后端设置 选择“添加新订阅”。 在“添加后端设置”窗口中输入以下值:
设置 操作 后端设置名称 输入 my-agw-backend-setting。 后端协议 选择“HTTPS”。 后端端口 输入 443。 使用已知的 CA 证书 选择 “是” 。 替代为新的主机名 请选择“是”。 主机名替代 选择“从后端目标中选取主机名”。 创建自定义探测 请选择“否”。 选择“添加”以添加后端设置。
在“添加路由规则”窗口中,再次选择“添加”。
在完成时选择“下一步: 标记”。
选择“下一步: 查看 + 创建”,然后选择“创建”。
将专用链接添加到应用程序网关
可以利用专用链接与仅限内部的容器应用环境建立安全连接,因为它允许您的应用程序网关通过虚拟网络与后端的容器应用通信。
创建应用程序网关后,选择“转到资源”。
在左侧菜单中选择“专用链接”,然后选择“添加”。
输入以下值:
设置 操作 名称 输入 my-agw-private-link。 专用链接子网 选择要为其创建专用链接的子网。 前端 IP 配置 选择你的应用程序网关的前端 IP。 在“专用 IP 地址设置”下,选择“添加”。
选择窗口底部的“添加”。
验证容器应用
在应用程序网关的“概述”页上找到其公共 IP 地址,或者可以搜索该地址。 若要搜索,请选择“所有资源”,然后在搜索框中输入 my-container-apps-agw-pip。 然后在搜索结果中选择 IP。
导航到应用程序网关的公共 IP 地址。
你的请求会自动路由到容器应用,后者会验证是否已成功创建应用程序网关。
清理资源
当你不再需要所创建的资源时,请删除资源组。 删除该资源组也会删除所有相关资源。
若要删除资源组,请执行以下操作:
在 Azure 门户菜单上,选择“资源组”,或搜索并选择“资源组”。
在“资源组”页上,搜索并选择“my-container-apps”。
在“资源组”页上,选择“删除资源组” 。
在“键入资源组名称”字段下输入 my-container-apps,然后选择“删除”