函数计算+NAT网关,函数从此有IP

本文涉及的产品
公网NAT网关,每月750个小时 15CU
简介: 背景 函数计算(FC)作为用户逻辑执行者与传统serverful的执行者一大优势是百毫秒级别的动态伸缩。Serverless的方式在很多场景下无疑可以提高资源利用率为用户降低成本,然而高速动态的伸缩模式也带来了和传统执行方式的不同。

背景

函数计算(FC)作为用户逻辑执行者与传统serverful的执行者一大优势是百毫秒级别的动态伸缩。Serverless的方式在很多场景下无疑可以提高资源利用率为用户降低成本,然而高速动态的伸缩模式也带来了和传统执行方式的不同。FC的用户常问的一个问题是:函数计算机器的IP是什么?这个问题的出现是因为很多用户函数访问的服务有基于IP的白名单/防火墙,如微信小程序。由于FC的机器是根据用户的请求新增释放,机器的公网IP不固定,也没有机制为用户分配固定网段,这样的环境中如何去访问微信小程序这样的服务呢?之前有使用ECS/ECI proxy方式解决这类问题的文章三分钟解决函数计算访问小程序 IP 白名单问题,本文将介绍另一种使用函数计算VPC+NAT网关使得函数公网出方向有一个固定的EIP,从而实现允许函数计算去访问需要有公网IP做白名单验证的服务。

原理

解决方案的原理在本质上和阿里云用户个人VPC中不赋予实例public IP但是允许这些VPC实例可以访问公网地址的原理是一样的,简单说就是创建NAT网关 绑定公网EIP,最后添加SNAT条目,从而允许VPC内的实例通过绑定的EIP 去访问公网,公网接收端看到的client IP只有NAT上绑定的EIP。FC访问用户VPC中的资源就是通过FC Service VPC中的实例通过attach用户VPC内的弹性网卡ENI 将函数实例中的流量通过用户的弹性网卡进入用户VPC,如果用户函数通过attached ENI访问公网, 流量同样按照SNAT条目 (VSwithch/ECS -> public IP的映射),通过绑定在NAT上的EIP出向公网,client IP即EIP address.

nat_fc_invoke_vpc

配置步骤

假设用户已经有一个VPC,VSwitch,安全组 (如还没有请参考 配置VPC功能), 只需要3个步骤:

  1. 创建一个使用用户VPC的FC Service和测试函数
  2. 创建一个NAT Gateway + EIP的组合, 并绑定EIP到新创建的NAT Gateway
  3. 添加一条SNAT条目,映射FC Service 所在的switch到绑定的EIP

下文将逐步详细讲解各配置配置方法

创建FC Service/Function

  • 如图中所示创建Service时选择已有的VPC, Vswitch和SecurityGroup
  • 特别注意Internet Access 选项需要关掉,否则流量会优先从函数实例的公网IP出向internet,而不是NAT EIP
  • 服务角色(Service Role)要配置AliyunECSNetworkInterfaceManagementAccess策略, 详见配置VPC功能

nat_create_fc_service_vpc_cn

  • 服务创建好后编写一个简单的python2.7 测试函数
import logging
import requests

def handler(event, context):
  logger = logging.getLogger()

  # Ask myip.ipip.net, what is my IP?
  r = requests.get('https://myip.ipip.net')
  clientIP = r.content.split()[1]
  logger.info('Client IP ' + clientIP)
  return clientIP

配置NAT Gateway + EIP

  • NAT网关 控制台,选择 组合购买EIP, 该步骤创建NAT网关和公网EIP

    • 选择对应的VPCID
    • 示例选择新购EIP,也可以使用已有的EIP

nat_create_nat_eip_cn

  • 创建好NAT和EIP后,将EIP绑定到NAT网关

nat_bind_eip

添加SNAT条目

  • 在相关NAT网关详情中找到 SNAT列表,并 创建SNAT条目
  • 选择与FC Service绑定的Vswitch作为交换机
  • 选择与该NAT网关绑定的EIP作为公网IP地址

nat_create_snat_entry_ch

测试

完成以上三个步骤后,调用前面步骤创建好的测试函数, 访问myip.ipip.net端收到的client IP即为NAT网关绑定的EIP地址,这个地址就可以作为微信小程序等白名单验证的IP地址了。

nat_fc_invoke_ch

总结

本文介绍了使用NAT网关+EIP解决FC访问公网服务需要固定白名单IP地址的问题。相比较使用ECS/ECI代理,这个方案具有天生的高可用和无运维的优势,配置也相对简单。不足是NAT网关价格最少12元/天,比较ECI的方式 (2.28元/天) 价格略高。这个方案更适合可用性要求高,成本压力小的关键业务。至此FC访问需要IP白名单验证的
第三方服务的各个方案已经有了详细介绍,用户可根据实际情况和需求合理选择。

相关实践学习
高可用应用架构
欢迎来到“高可用应用架构”课程,本课程是“弹性计算Clouder系列认证“中的阶段四课程。本课程重点向您阐述了云服务器ECS的高可用部署方案,包含了弹性公网IP和负载均衡的概念及操作,通过本课程的学习您将了解在平时工作中,如何利用负载均衡和多台云服务器组建高可用应用架构,并通过弹性公网IP的方式对外提供稳定的互联网接入,使得您的网站更加稳定的同时可以接受更多人访问,掌握在阿里云上构建企业级大流量网站场景的方法。 学习完本课程后,您将能够: 理解高可用架构的含义并掌握基本实现方法 理解弹性公网IP的概念、功能以及应用场景 理解负载均衡的概念、功能以及应用场景 掌握网站高并发时如何处理的基本思路 完成多台Web服务器的负载均衡,从而实现高可用、高并发流量架构
目录
相关文章
|
1月前
|
人工智能 关系型数据库 Serverless
Serverless 应用引擎常见问题之生成的函数镜像改为自定义的镜像如何解决
Serverless 应用引擎(Serverless Application Engine, SAE)是一种完全托管的应用平台,它允许开发者无需管理服务器即可构建和部署应用。以下是Serverless 应用引擎使用过程中的一些常见问题及其答案的汇总:
27 5
|
3月前
|
JSON 安全 Serverless
在使用阿里云函数计算(FC)服务时,您可以通过自定义域名来访问部署好的云函数
在使用阿里云函数计算(FC)服务时,您可以通过自定义域名来访问部署好的云函数【1月更文挑战第23天】【1月更文挑战第112篇】
223 7
|
3月前
|
Serverless 异构计算
函数计算FC部署问题之函数报错如何解决
函数计算FC部署是指在阿里云Function Compute服务上部署函数或应用程序的过程,它提供了一个无需管理服务器即可运行代码的平台;本合集将介绍和总结函数计算FC部署中常见的问题与解决方案,指导用户如何高效部署和管理Serverless函数。
|
4月前
|
网络协议
地址重叠时,用户如何通过NAT访问对端IP网络?
地址重叠时,用户如何通过NAT访问对端IP网络?
|
1月前
|
人工智能 关系型数据库 Serverless
Serverless 应用引擎常见问题之API生成的函数镜像改为自定义的镜像如何解决
Serverless 应用引擎(Serverless Application Engine, SAE)是一种完全托管的应用平台,它允许开发者无需管理服务器即可构建和部署应用。以下是Serverless 应用引擎使用过程中的一些常见问题及其答案的汇总:
39 3
|
17天前
|
Linux 虚拟化
VMware workstation 中centos7虚拟机在nat模式下怎么配置网卡,指定我想要的IP并且可以联网
https://blog.csdn.net/2302_78534730/article/details/132825156?spm=1001.2014.3001.5502
131 0
|
9天前
|
域名解析 网络协议 Linux
TCP/IP协议及配置、IP地址、子网掩码、网关地址、DNS与DHCP介绍
TCP/IP协议及配置、IP地址、子网掩码、网关地址、DNS与DHCP介绍
|
5月前
|
网络协议 Linux 网络安全
suse 12 配置ip,dns,网关,hostname,ssh以及关闭防火墙
suse 12 配置ip,dns,网关,hostname,ssh以及关闭防火墙
150 0
|
3月前
|
存储 监控 Serverless
在处理阿里云函数计算3.0版本的函数时,如果遇到报错但没有日志信息的情况
在处理阿里云函数计算3.0版本的函数时,如果遇到报错但没有日志信息的情况【1月更文挑战第23天】【1月更文挑战第114篇】
63 5
|
3月前
梳理IP地址、子网掩码、网关
VPC中各种网络相关知识
24 0