虚拟网络地址转换 (NAT) 简化了虚拟网络仅限出站的 Internet 连接。 在子网中配置后,所有出站连接将使用指定的静态公共 IP 地址。 NAT 对于需要使用第三方服务(使用 IP 地址允许列表作为安全措施)的应用非常有用。 要了解详细信息,请参阅什么是 Azure NAT 网关?。
本教程介绍如何使用 NAT 网关从 HTTP 触发的函数路由出站流量。 此函数可让你检查其自身的出站 IP 地址。 在本教程中,你将:
- 创建虚拟网络
- 创建高级计划函数应用
- 创建公共 IP 地址
- 创建 NAT 网关
- 配置函数应用以通过 NAT 网关路由出站流量
下图显示了你创建的解决方案的体系结构:
高级计划中运行的函数与 Azure 应用服务中的 Web 应用具有相同的承载功能,其中包括 VNet 集成功能。 若要了解有关 VNet 集成的详细信息(包括故障排除和高级配置),请参阅将应用与 Azure 虚拟网络集成。
若要学习本教程,必须了解 IP 寻址和子网划分。 可以从这篇介绍了寻址和子网划分基础知识的文章入手。 网上还有其他许多相关文章和视频。
如果没有 Azure 订阅,可在开始前创建一个试用帐户。
如果已完成将 Functions 与 Azure 虚拟网络集成教程,可以跳至创建 HTTP 触发器函数。
在 Azure 门户菜单中,选择“创建资源”。 在 Azure 市场中,选择“网络”>“虚拟网络” 。
在“创建虚拟网络”中,按照下表中显示的说明输入或选择设置:
设置 值 订阅 选择订阅。 资源组 选择“新建”,输入 myResourceGroup,然后选择“确定”。 名称 输入 myResourceGroup-vnet。 位置 选择“中国北部 2”。 选择“下一步: IP 地址”,输入 10.10.0.0/16 作为“IPv4 地址空间”。
选择“添加子网”,输入 Tutorial-Net 作为“子网名称”,输入 10.10.1.0/24 作为“子网地址范围” 。
选择“添加”,然后选择“查看 + 创建”。 将其余的设置保留默认值,然后选择“创建”。
在“创建虚拟网络”中,选择“创建”。
接下来,在高级计划中创建一个函数应用。 此计划提供无服务器规模,同时支持虚拟网络集成。
本教程介绍如何在高级计划中创建函数应用。 使用专用(应用服务)计划时也可以使用相同的功能。
注意
为在本教程中获得最佳体验,请选择“.NET”作为运行时堆栈,选择“Windows”作为操作系统。 此外,应在虚拟网络所在的同一区域中创建函数应用。
在 Azure 门户菜单上或在门户主页中,选择“创建资源”。
在 “新建” 页面,选择 “计算”>“函数应用” 。
在“基本信息”页面上,按照下列所述使用函数应用设置:
在完成时选择“下一步:托管”。 在“托管”页面上,输入以下设置:
设置 建议值 说明 存储帐户 全局唯一名称 创建函数应用使用的存储帐户。 存储帐户名称必须为 3 到 24 个字符,并且只能包含数字和小写字母。 也可使用现有帐户,但该帐户必须符合存储帐户要求。 操作系统 首选操作系统 系统会根据你的运行时堆栈选择为你预先选择一个操作系统,但你可以根据需要更改该设置。 Python 仅在 Linux 上受支持。 仅在 Windows 上支持门户内编辑。 计划 Premium 定义如何将资源分配给 Function App 的托管计划。 选择“高级”。 默认创建一个新的应用服务计划。 默认的“SKU 和大小”为 EP1,其中 EP 表示“弹性高级”(elastic premium) 。 要了解详细信息,请参阅高级 SKU 的列表。
在高级计划上运行 JavaScript 函数时,应选择 vCPU 数更少的实例。 有关详细信息,请参阅选择单核心高级计划。在完成时选择“下一步:监视”。 在“监视”页面上,输入以下设置:
设置 建议值 说明 Application Insights 默认 在最近的受支持的区域中,创建一个具有相同应用名称的 Application Insights 资源。 展开此设置即可更改“新建资源名称”,或者在 Azure 地理位置选择其他位置来存储你的数据 。 选择“查看 + 创建”,以便查看应用配置选择。
在“查看 + 创建”页上查看设置,然后选择“创建”来预配并部署函数应用 。
选择门户右上角的“通知”图标,留意是否显示了“部署成功”消息。
选择“转到资源”,查看新的函数应用。 还可选择“固定到仪表板”。 固定可以更轻松地从仪表板返回此函数应用资源。
现在可以将函数应用连接到虚拟网络。
在函数应用中,选择左侧菜单中的“网络”,然后在“VNet 集成”下选择“单击此处进行配置” 。
在“VNET 集成”页上,选择“添加 VNet” 。
在“网络功能状态”中,使用插图下面的表格中的设置:
设置 建议值 说明 虚拟网络 MyResourceGroup-vnet 此虚拟网络就是你先前创建的网络。 子网 创建新子网 在虚拟网络中创建一个子网供函数应用使用。 必须将 VNet 集成配置为使用空子网。 子网名称 Function-Net 新子网的名称。 虚拟网络地址块 10.10.0.0/16 只应定义一个地址块。 子网地址块 10.10.2.0/24 子网大小限制高级计划函数应用可以横向扩展到的实例总数。 此示例使用具有 254 个可用主机地址的 /24
子网。 此子网进行了超量预配,但易于计算。选择“确定”以添加子网。 关闭“VNet 集成”和“网络功能状态”页,返回到函数应用页 。
函数应用现在可以访问虚拟网络。 启用连接后,vnetrouteallenabled
站点设置设定为 1
。 必须将此站点设置或旧版 WEBSITE_VNET_ROUTE_ALL
应用程序设置设定为 1
。
接下来,将 HTTP 触发的函数添加到函数应用中。
从“Functions”窗口的左侧菜单中选择“Functions”,然后从顶部菜单中选择“添加”。
在“新建函数”窗口中,选择“Http 触发器”并接受新函数的默认名称,或输入新名称 。
在“代码 + 测试”中,将模板生成的 C# 脚本 (.csx) 代码替换为以下代码:
#r "Newtonsoft.Json" using System.Net; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Primitives; using Newtonsoft.Json; public static async Task<IActionResult> Run(HttpRequest req, ILogger log) { log.LogInformation("C# HTTP trigger function processed a request."); var client = new HttpClient(); var response = await client.GetAsync(@"https://ifconfig.me"); var responseMessage = await response.Content.ReadAsStringAsync(); return new OkObjectResult(responseMessage); }
此代码将调用一个外部网站,该网站返回调用方的 IP 地址,在本例中为此函数。 此方法可让你轻松确定函数应用使用的出站 IP 地址。
现已准备好运行函数并检查当前的出站 IP。
现在可以运行该函数。 但首先请在门户中查看函数应用正在使用哪些出站 IP。
在函数应用中,选择“属性”并查看“出站 IP 地址”字段 。
现在,返回到你的 HTTP 触发器函数,选择“代码 + 测试”,然后选择“测试/运行” 。
选择“运行”以执行该函数,然后切换到“输出” 。
验证 HTTP 响应正文中的 IP 地址是否为先前查看的出站 IP 地址中的值之一。
现在,可以创建一个公共 IP,并使用 NAT 网关来修改此出站 IP 地址。
在你的资源组中选择“添加”,在 Azure 市场中搜索“公共 IP 地址”,然后选择“创建” 。 使用插图下面的表格中的设置:
设置 建议的值 IP 版本 IPv4 SKU Standard 层 区域 名称 出站 IP 订阅 确保已显示你的订阅 资源组 myResourceGroup(或分配给你的资源组的名称) 位置 中国北部 2(或已分配给其他资源的位置) 可用性区域 无区域 选择“创建”以提交部署。
部署完成后,导航到新建的“公共 IP 地址”资源,并查看“概述”中的 IP 地址。
现在,让我们创建 NAT 网关。 开始学习前面的虚拟网络教程时,Function-Net
是该教程中建议的子网名称,MyResourceGroup-vnet
是该教程中建议的虚拟网络名称。
在你的资源组中选择“添加”,在 Azure 市场中搜索“NAT 网关”,然后选择“创建” 。 使用插图下面的表格中的设置来填充“基本信息”选项卡:
设置 建议的值 订阅 订阅 资源组 myResourceGroup(或分配给你的资源组的名称) NAT 网关名称 myNatGateway 区域 中国北部 2(或已分配给其他资源的位置) 可用性区域 无 选择“下一步: 出站 IP”。 在“公共 IP 地址”字段中,选择前面创建的公共 IP 地址。 将“公共 IP 前缀”保持未选中状态。
选择“下一步: 子网”。 在“虚拟网络”字段中选择“myResourceGroup-vnet”资源,并选择“Function-Net”子网。
依次选择“查看 + 创建”和“创建”来提交部署 。
部署完成后,NAT 网关便可以将流量从你的函数应用子网路由到 Internet。
重复上述步骤再次运行该函数。 现在,在函数输出中应会看到你在 NAT 中配置的出站 IP 地址。
你已创建了完成本教程所需的资源。 你需要为这些资源付费,具体取决于你的帐户状态和服务定价。 为了避免产生额外的成本,请在不再需要这些资源时将其删除。
在 Azure 门户中转到“资源组”页。
若要从函数应用页转到该页,请选择“概览”选项卡,然后选择“资源组”下的链接。
若要从仪表板转到该页,请选择“资源组”,然后选择用于本文的资源组。
在“资源组”页中查看所包括的资源的列表,然后验证这些资源是否是要删除的。
选择“删除资源组”,然后按说明操作。
删除操作可能需要几分钟。 完成后会显示一个通知,持续数秒。 也可以选择页面顶部的钟形图标来查看通知。