當您通過MaxCompute訪問位于外網或VPC網絡中的目標服務時,默認情況下,MaxCompute與目標服務之間的網絡不可達。您需要開通網絡連接以便訪問外網或VPC中的目標服務(例如指定IP或域名、RDS、HBase集群、Hadoop集群等)。本文為您介紹MaxCompute與目標服務間的網絡結構及支持的網絡開通方案。
免責聲明
MaxCompute提供的公網與VPC訪問能力目前屬于免費服務,存在以下限制:
保障網絡連通性,但是對用戶代碼觸發的網絡行為,平臺可能因為故障切換的原因導致節點重跑,用戶需要在代碼層面做兼容,建議只做數據讀取操作,寫操作需要自行防止多次寫入可能產生的臟數據。
訪問需要經過代理,代理的轉發能力有限,盡量使用長連接,并控制節點規模,并發過大或連接過多可能導致網絡請求失敗。
不保障帶寬,因此可能存在任務運行慢情況,平臺不承擔相應責任。
經過代理后的出口IP有限,因此出現的連接行為異常,此時需要與阿里云技術支持確認。
出口IP存在變更的可能性,被訪問的服務不應該開啟訪問控制,對于針對代理出口配置IP白名單的情況,平臺不保障出口IP不變。
如果完成MaxCompute的網絡連通后,運行MaxCompute任務時仍然出現了無法訪問等問題,可能是運行MaxCompute任務的工具存在網絡限制。例如,使用DataWorks進行數據同步或數據清洗時,需保障DataWorks的資源組與數據源網絡連通、DataWorks的沙箱白名單沒有限制數據源的訪問,DataWorks的資源組網絡連通與沙箱配置請參見:網絡連通方案。
功能介紹
MaxCompute與目標服務間的網絡結構及支持的網絡開通方案如下:
MaxCompute訪問目標服務有如下四種場景:
場景一:訪問公網方案。
場景二:訪問VPC方案(專線直連)。
適用于通過MaxCompute SQL、UDF、Spark 、MR、PyODPS/Mars、外部表或基于湖倉一體架構訪問處于VPC網絡下的RDS、HBase集群、Hadoop集群等場景。您需要登錄VPC所屬主賬號對MaxCompute進行授權,并在MaxCompute控制臺創建MaxCompute與VPC網絡之間的連接,創建完成后,您可以在控制臺下看到MaxCompute創建的ENI網卡,該ENI網卡的訪問規則由創建專有網絡連接時您提供的安全組控制,以此來建立MaxCompute與目標服務間的網絡通路。
說明如果目標服務存在訪問控制,需要您將ENI網卡IP或者vSwitch網段添加到目標服務的訪問白名單中。
MaxCompute訪問VPC網絡時,MaxCompute側僅打通到所填VPC ID的網絡連接,如需跨Region訪問或者訪問該Region的其他VPC,請根據云上VPC現有打通方案,打通專線直連方案中所配置的VPC和其他VPC之間的網絡。
場景三:訪問部分阿里云服務。
適用于通過MaxCompute SQL、UDF、Spark 、MR、PyODPS/Mars、外部表或基于湖倉一體架構訪阿里云OSS、DLF、OTS(Tablestore)、Hologres等服務的場景,連接使用阿里云內部服務提供的經典網絡地址。
如果您創建了OSS或OTS外部表,可以通過OSS、OTS的內網Endpoint訪問。
如果您調用UDF訪問OSS、OTS,只能通過OSS、OTS的公網Endpoint訪問。
不同場景下的配置與訪問Endpoint詳情請參見下文的訪問部分阿里云服務章節。
前提條件
當您申請開通MaxCompute與目標服務間的網絡連接前,請確認已滿足以下條件:
已創建MaxCompute項目。如果已有MaxCompute項目,直接使用即可,不必再創建新項目。在湖倉一體場景中,建議設置MaxCompute項目的數據類型為Hive兼容類型。更多創建MaxCompute項目信息,請參見創建MaxCompute項目。
如果需要訪問位于VPC網絡中的目標服務,請確保VPC所有者賬號、訪問MaxCompute項目的阿里云賬號,以及目標服務環境或集群的管理員賬號是同一個主賬號或同在一個主賬號下。
地域支持情況
MaxCompute僅支持在如下地域通過訪問公網或VPC網絡方案開通網絡連接。
方案類型 | 支持地域 | 支持連通的目標 |
訪問公網方案 |
| 公網IP或域名 |
訪問VPC方案(專線直連) |
|
|
訪問公網方案
通過項目管理編輯外部網絡地址
對于常用的公網IP或域名(如aliyun.com),您可以直接通過MaxCompute控制臺的項目管理進行添加與刪除:
登錄MaxCompute控制臺,在左上角選擇地域。
在左側導航欄單擊項目管理。
在項目管理頁面,單擊目標項目操作列的管理。
在參數配置頁簽的外部網絡區域,設置可用的外部網絡地址。
單擊提交。
支持的一級域名包括:aliyuncs.com、aliyun.com、amap.com、dingtalk.com、alicloudapi.com、cainiao.com、alicdn.com、taobao.com、alibaba.com、alipaydev.com、alibabadns.com。
不支持配置IPv6地址,公網IP數量無限制。
如果您遇到某外部網絡地址無法通過自動校驗的問題,則需要刪除該地址后重新提交。如仍有需要,您可以通過提交表單申請的方式,申請配置外部網絡地址,具體操作請參見下述的提交申請。
提交申請
無法通過自動校驗的公網IP或域名需要按照如下步驟進行操作:
提交表單,申請配置公網的IP或域名、端口的白名單。
表單中需要填寫目標IP或域名、端口,如果需要訪問多個域名或端口,請使用英文逗號(,)分隔。例如訪問阿里云域名,需要提供的網絡配置信息為
www.aliyun.com:80
;訪問高德服務,需要提供的網絡配置信息為restapi.amap.com:443,restapi.amap.com:80
。MaxCompute技術支持團隊接收到提交的申請信息后,會進行審核并完成配置。確認處理完畢后(通常處理周期為3個工作日),即可繼續執行后續步驟。若對審核結果有異議,您可通過單擊申請鏈接或搜索(釘釘群號:11782920)加入MaxCompute開發者社區釘群與我們溝通交流。
SQL自定義函數(UDF)任務
參數設置如下:
--設置網絡連接申請表單中配置的公網IP或域名、端口。即下方SQL語句要訪問的公網IP或域名。 --如果需要訪問多個域名或端口,請使用英文逗號(,)分隔 set odps.internet.access.list=<ip_address:port|realm_name:port>; --執行SQL語句調用UDF。 select <UDF_name>("<http://ip_address|realm_name>");
ip_address:port | realm_name:port:必填。目標公網IP或域名、端口。
UDF_name:訪問公網IP或域名的UDF。
任務示例代碼如下:
package com.aliyun.odps.test.udf; import com.aliyun.odps.udf.UDF; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.URL; public class <UDF_name> extends UDF { public String evaluate(String urlStr) throws IOException { URL url = new URL(urlStr); StringBuilder sb = new StringBuilder(); try (BufferedReader reader = new BufferedReader(new InputStreamReader(url.openStream()))) { String line; while ((line = reader.readLine()) != null) { sb.append(line).append('\n'); } } return sb.toString(); } }
執行:基于UDF示例代碼創建的自定義函數名稱為
url_fetch
,網絡連接審核通過后,執行命令示例如下。set odps.internet.access.list=www.aliyun.com:80; select url_fetch("http://www.aliyun.com");
Spark on MaxCompute任務
參數設置:此配置項需加在Spark客戶端的conf文件中或DataWorks提交Spark作業時的配置項中。
spark.hadoop.odps.cupid.smartnat.enable = true;
spark.hadoop.odps.cupid.internet.access.list=<ip_address:port>
白名單
如果用戶服務端有訪問控制,需要將MaxCompute訪問公網方案的出口IP添加到用戶服務白名單,出口IP請提交工單申請獲取。
訪問VPC方案(專線直連)
開通專線網絡連接
操作流程
授權操作:
需要針對登錄用戶授予能夠創建網絡連接對象Networklink(詳情請參見Networklink),授權的用戶需要是項目所有者(Project Owner),以及具備租戶級別的Super_Administrator或Admin角色的用戶(詳情請參見角色規劃),授權過程可參見租戶內對象權限一覽表。
對MaxCompute進行授權:授權的目的在于允許MaxCompute在VPC內創建ENI網卡,以實現MaxCompute到用戶VPC的連通。用戶只要在阿里云賬號登錄態下單擊授權即可。
說明MaxCompute訪問VPC時的計費規則請參考功能計費。
配置安全組規則:在VPC實例下,創建獨立安全組用于控制MaxCompute對VPC網絡內的各種資源的訪問權限。
登錄專有網絡管理控制臺,單擊目標VPC實例ID后,單擊資源管理頁簽。
在資源管理頁簽的專有網絡資源區域,將鼠標懸停至安全組數值上方后,單擊添加(注意:選擇安全組為普通安全組,不是企業安全組。普通安全組的出口是默認開啟的。企業安全組的出口是默認關閉的,會導致無法訪問VPC內的任何服務)為MaxCompute創建獨立安全組并記錄安全組ID。需要選擇與連通服務相同的VPC網絡。更多創建安全組操作,請參見創建安全組。
添加安全組:
配置安全組:
說明MaxCompute在后續的創建網絡通路過程中會默認自動根據帶寬需求創建2個ENI,不收取費用,由MaxCompute創建的ENI將位于這個安全組內。在HBase場景,如果用戶的HBase無法對某個安全組開放網絡權限,您可以將MaxCompute創建的ENI IP添加至白名單即可。由于ENI IP可能會發生變化,推薦您添加VPC實例對應交換機的IP網段至白名單。您可以登錄ECS管理控制臺,在左側導航欄,單擊彈性網卡,獲取ENI IP。
創建MaxCompute與目標VPC網絡間的網絡連接。
阿里云賬號(主賬號)或擁有MaxCompute租戶級別的Super_Administrator或Admin角色的RAM子賬號(詳情請參見MaxCompute租戶級別角色),可以在MaxCompute控制臺創建MaxCompute與VPC網絡之間的連接。操作如下:
在MaxCompute控制臺的左側導航欄單擊
。在新增網絡連接對話框中,按下表填寫參數后單擊確定。
參數名稱
說明
連接名稱
自定義網絡鏈接名稱。格式如下:
字母開頭。
只能包含字母、下劃線(_)和數字。
長度在1-63個字符。
類型
網絡連接類型。默認為直通鏈接(passthrough)。
說明直通鏈接對應的即是專有網絡連接方案。
區域
MaxCompute支持的通過專有網絡連接方案開通網絡連接的地域。詳情請參見開通地域。
已選擇VPC
VPC實例ID。
獲取方式如下:
連接HBase、Hadoop集群時:您可以在對應控制臺的網絡連接信息處獲取該信息。
其他情況:登錄專有網絡管理控制臺,在專有網絡頁面即可獲取VPC ID。
交換機
VPC網絡綁定的交換機ID。
獲取方式如下:
連接HBase、Hadoop集群時:您可以在對應控制臺的網絡連接信息處獲取該信息。
其他情況:登錄專有網絡管理控制臺,在左側導航欄單擊交換機,即可在右側通過VPC實例ID獲取到交換機ID。
安全組
步驟【開通專線網絡連接】中記錄的安全組ID。
配置目標服務的安全組。
在完成ENI專線開通后,用戶還需要在待訪問的服務中增加相關安全規則,授權代表MaxCompute的安全組,即就上述第二步中提供的安全組能訪問哪些服務的具體端口。例如9200、31000等。例如,用戶需要訪問阿里云RDS,則需要在RDS中增加規則,允許第二步中創建的安全組訪問。如果用戶需要訪問的服務無法添加安全組,只能添加IP,那么需要將目標服務所在vSwitch網段都添加進來。
配置Hadoop集群安全組。
為Hadoop集群的安全組配置如下信息,確保MaxCompute可以訪問Hadoop集群。安全組配置內容如下:
配置Hadoop集群所在安全組的入方向訪問規則。
授權對象為ENI所在的安全組,即步驟2中創建的安全組。
HiveMetaStore端口:9083。
HDFS NameNode端口:8020。
HDFS DataNode端口:50010。
例如,當您連接在阿里云E-MapReduce上創建的Hadoop集群時,您需要配置的安全組規則如下圖所示。更多配置操作,請參見創建安全組。
配置HBase集群安全組。
將為MaxCompute創建的安全組或ENI IP加入HBase集群的安全組或IP白名單中。
例如,當您連接阿里云HBase集群時,可以登錄HBase管理控制臺,在集群列表頁面單擊目標集群名稱后,在左側導航欄單擊訪問控制,即可在安全組或白名單設置頁簽添加安全組或IP白名單。更多添加安全組或IP白名單操作,請參見設置白名單和安全組。
說明如果不允許添加安全組,您可以在白名單設置頁簽添加MaxCompute創建的ENI IP。當MaxCompute配置變更時,ENI IP可能會發生變化,推薦您添加交換機ID的IP網段添加至白名單。
配置RDS安全組。
將為MaxCompute創建的安全組或ENI IP加入RDS安全組或IP白名單中。
例如,當您連接阿里云RDS時,可以登錄RDS管理控制臺,在實例列表頁面單擊目標實例名稱后,在左側導航欄單擊白名單與安全組,即可在安全組或白名單設置頁簽添加安全組或IP白名單。更多添加安全組或IP白名單設置操作,請參見設置安全組或設置IP白名單。
說明當MaxCompute配置變更時,ENI IP可能會發生變化,推薦您將交換機ID的IP網段添加至白名單。
SQL任務
添加配置項
UDF訪問VPC網絡(詳情請參見:通過UDF訪問VPC網絡資源)。代碼如下:
--設置網絡連接名稱,即基于專有網絡連接方案配置的網連接名稱,僅本Session有效: set odps.session.networklink=testLink;
外部表訪問VPC網絡(詳情請參見:RDS外部表、HBase外部表、Lindorm外部表)。代碼如下:
-- 在建表語句中設置參數 TBLPROPERTIES( 'networklink'='<networklink_name>')
湖倉一體配置Networklink(詳情請參見:MaxCompute湖倉一體概述)。
Spark on MaxCompute 任務
完成上述【開通專線網絡連接】操作后,可添加以下配置。
運行Spark作業,需要增加如下配置,即可使用ENI專線連通目標VPC內的服務(詳情請參見:Spark訪問VPC實例)。
spark.hadoop.odps.cupid.eni.enable = true
spark.hadoop.odps.cupid.eni.info=regionid:vpc id
白名單
如果用戶服務端有訪問控制,需要將創建專線網絡連接的安全組添加進服務端白名單。
訪問部分阿里云服務
適用于通過MaxCompute SQL、UDF、Spark 、MR、PyODPS/Mars、外部表或基于湖倉一體架構訪阿里云OSS、DLF、OTS(Tablestore)、Hologres等服務的場景,連接使用阿里云內部服務提供的經典網絡地址。
通過外部表訪問OSS、OTS
如果您創建了OSS或OTS外部表,可以通過OSS、OTS的內網Endpoint訪問。
其他通過外部表訪問的示例可參考:創建Hologres外部表。
通過UDF訪問OSS、OTS
如果您調用UDF訪問OSS、OTS,只能通過OSS、OTS的公網Endpoint訪問,且在使用公網Endpoint訪問前,您需要先將對應Endpoint添加至MaxCompute的白名單中。
將待訪問的OSS、OTS的公網Endpoint添加至MaxCompute的白名單中。
使用外網Endpoint訪問OSS或OTS。
Spark on MaxCompute任務示例可參考:Spark訪問OSS。