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

  1. 云栖社区>
  2. 博客>
  3. 正文

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

shuaichang 2019-03-09 07:21:12 浏览908
展开阅读全文

背景

函数计算(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白名单验证的
第三方服务的各个方案已经有了详细介绍,用户可根据实际情况和需求合理选择。

网友评论

登录后评论
0/500
评论
shuaichang
+ 关注