天天看點

函數計算+NAT網關,函數從此有IP 背景原理配置步驟測試總結

背景

函數計算(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網關,函數從此有IP 背景原理配置步驟測試總結

配置步驟

假設使用者已經有一個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網關,函數從此有IP 背景原理配置步驟測試總結
  • 服務建立好後編寫一個簡單的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網關,函數從此有IP 背景原理配置步驟測試總結
  • 建立好NAT和EIP後,将EIP綁定到NAT網關
函數計算+NAT網關,函數從此有IP 背景原理配置步驟測試總結

添加SNAT條目

  • 在相關NAT網關詳情中找到

    SNAT清單

    ,并

    建立SNAT條目

  • 選擇與FC Service綁定的Vswitch作為

    交換機

  • 選擇與該NAT網關綁定的EIP作為

    公網IP位址

函數計算+NAT網關,函數從此有IP 背景原理配置步驟測試總結

測試

完成以上三個步驟後,調用前面步驟建立好的測試函數, 通路myip.ipip.net端收到的client IP即為NAT網關綁定的EIP位址,這個位址就可以作為微信小程式等白名單驗證的IP位址了。

函數計算+NAT網關,函數從此有IP 背景原理配置步驟測試總結

總結

本文介紹了使用NAT網關+EIP解決FC通路公網服務需要固定白名單IP位址的問題。相比較使用ECS/ECI代理,這個方案具有天生的高可用和無運維的優勢,配置也相對簡單。不足是NAT網關價格最少12元/天,比較ECI的方式 (2.28元/天) 價格略高。這個方案更适合可用性要求高,成本壓力小的關鍵業務。至此FC通路需要IP白名單驗證的

第三方服務的各個方案已經有了詳細介紹,使用者可根據實際情況和需求合理選擇。