全部產品
Search
文件中心

Cloud Enterprise Network:隔離VPC使用共用服務

更新時間:Sep 02, 2026

雲企業網支援在地區內定義靈活的互連、隔離、引流策略。本文為您介紹如何通過雲企業網實現相互隔離的VPC同時訪問同一個共用服務。

背景資訊

本文以下圖情境為例。某企業在阿里雲華東1(杭州)地區已經部署有三個VPC,其中VPC3為部署共用服務的VPC。企業希望VPC1和VPC2均能訪問VPC3使用共用服務,而VPC1和VPC2之間不互連。

網路規劃

為實現上述需求,結合雲企業網自訂路由表、關聯轉寄、路由學習等功能,對企業網段和路由規劃如下:本文樣本中,VPC1、VPC2、VPC3與轉寄路由器同屬一個阿里雲帳號。如果共用服務VPC與業務VPC分屬不同阿里雲帳號,本文的隔離策略機制同樣適用,差異配置請參見下文的跨帳號情境下的差異配置。

  • 將VPC3串連到轉寄路由器時,開啟自动关联至转发路由器的默认路由表和自动传播系统路由至转发路由器的默认路由表進階功能。

    開啟後,轉寄路由器系統路由表能自動學習到VPC3的系統路由,並且VPC3通過查詢轉寄路由器的系統路由表進行流量轉寄。

  • 將VPC1和VPC2串連到轉寄路由器時,均只開啟自动传播系统路由至转发路由器的默认路由表一個進階配置,然後將VPC1和VPC2關聯到轉寄路由器的自訂路由表,且在自訂路由表中,添加去往VPC3的自訂路由條目。

    完成後,轉寄路由器系統路由表能學習到VPC1和VPC2的全部系統路由。VPC1和VPC2通過查詢自訂路由表將流量轉寄到VPC3。此時,VPC1和VPC2之間不互連。

  • 分別在VPC1、VPC2、VPC3的路由表中添加0.0.0.0/0,下一跳指向轉寄路由器的路由。

  • 在華東1(杭州)地區建立三個VPC,並在指定可用性區域中建立交換器。VPC中的網段規劃,如下表所示。

    重要

    在您進行網段規劃時,請確保VPC之間的網段沒有重疊。

    Virtual Private Cloud

    交換器

    交換器可用性區域

    網段規劃

    Elastic Compute Service

    VPC1

    主網段:192.168.0.0/16

    交換器1

    可用性區域A

    192.168.0.0/24

    ECS1地址:

    192.168.0.224

    交換器2

    可用性區域B

    192.168.1.0/24

    VPC2

    主網段:172.16.0.0/16

    交換器3

    可用性區域A

    172.16.0.0/24

    ECS2地址:

    172.16.0.222

    交換器4

    可用性區域B

    172.16.1.0/24

    VPC3

    主網段:10.0.0.0/16

    交換器5

    可用性區域A

    10.0.0.0/24

    ECS3地址:

    10.0.0.112

    交換器6

    可用性區域B

    10.0.1.0/24

操作步驟

本文提供控制台和Terraform兩種配置方式,請按需選擇。

控制台

步驟一:建立雲企業網執行個體

在您串連網路執行個體前,您需要先建立一個雲企業網執行個體。

  1. 登入雲企業網管理控制。

  2. 在Cloud Enterprise Network執行個體頁面,單擊建立Cloud Enterprise Network執行個體。

  3. 在建立Cloud Enterprise Network執行個體對話方塊,根據以下資訊配置雲企業網執行個體,然後單擊确认。

    • 名稱:雲企業網執行個體的名稱。

    • 描述:雲企業網執行個體的描述。

步驟二:建立VPC串連

  1. 在Cloud Enterprise Network執行個體頁面,單擊目標執行個體ID。

  2. 在雲企業網執行個體詳情頁面的基本資料頁簽,單擊VPC下的添加網路執行個體表徵圖。

  3. 在连接网络实例頁面,根據以下資訊進行配置,然後單擊确定创建。

    • 執行個體類型:系統預設選擇Virtual Private Cloud。

    • 地區:選擇要串連的網路執行個體所在的地區。本樣本選擇華東1(杭州)。

    • 转发路由器:系統自動為您在該地區建立轉寄路由器。

    • 资源归属UID:選擇要串連的網路執行個體所歸屬的帳號類型。本樣本使用預設值同账号。

    • 付費方式:使用預設值隨用隨付。

    • 连接名称:輸入串連名稱。

    • 網路執行個體:選擇要串連的VPC網路執行個體ID。本樣本選擇VPC3。

    • 交换机:在轉寄路由器支援的可用性區域選擇交換器執行個體。

      • 在轉寄路由器支援多個可用性區域的地區,您需要在至少2個可用性區域中各選擇一個交換器執行個體。在VPC和轉寄路由器流量互連的過程中,這2個交換器執行個體可以實現可用性區域層級的容災。

        推薦您在每個可用性區域中都選擇一個交換器執行個體,以減少流量繞行,體驗更低傳輸時延以及更高效能。

        如果企業版轉寄路由器在當前地區僅支援一個可用性區域,則您需要在當前可用性區域選擇一個交換器執行個體。
    • 高级配置:系統預設幫您選中以下三種進階功能。本樣本中VPC3隻開啟自动关联至转发路由器的默认路由表和自动传播系统路由至转发路由器的默认路由表進階功能。

      • 自动关联至转发路由器的默认路由表

        開啟本功能後,VPC串連會自動關聯至轉寄路由器的預設路由表,轉寄路由器通過查詢預設路由錶轉發VPC執行個體的流量。

      • 自动传播系统路由至转发路由器的默认路由表

        開啟本功能後,VPC執行個體會將自身的系統路由傳播至轉寄路由器的預設路由表中,用於網路執行個體的互連。

      • 自动为VPC的所有路由表配置指向转发路由器的路由

        開啟本功能後,系統將在VPC執行個體的所有路由表內自動設定10.0.0.0/8、172.16.0.0/12、192.168.0.0/16三條路由條目,其下一跳均指向VPC串連,用於引導VPC執行個體的IPv4流量進入轉寄路由器。轉寄路由器預設不向VPC執行個體傳播路由。

        重要

        如果VPC執行個體需要實現IPv6網路通訊,建立VPC串連後,您需要為VPC串連開啟路由同步功能或者在VPC執行個體的路由表中手動添加指向VPC串連的IPv6路由條目,VPC執行個體的IPv6流量才能進入轉寄路由器。

  4. VPC3串連建立完成後,單擊继续创建连接。

    請重複步驟3,建立VPC1和VPC2串連。其中,在您為VPC1和VPC2建立串連時,均只選中自动传播系统路由至转发路由器的默认路由表一個進階配置。

  5. VPC串連建立完成後,單擊返回列表,返回到雲企業網執行個體詳情頁面。

步驟三:VPC1和VPC2關聯自訂路由表

  1. 在雲企業網執行個體詳情頁面,找到已建立的轉寄路由器,單擊其執行個體ID。

  2. 在轉寄路由器詳情頁面,單擊转发路由器路由表頁簽。

  3. 在頁簽左側地區,單擊创建路由表。

  4. 在创建路由表對話方塊,根據以下資訊進行配置,然後單擊確定。

    • 转发路由器:系統自動選擇當前地區的轉寄路由器。

    • 路由表名稱:輸入路由表名稱。

    • 路由表描述:輸入路由表描述。

    • 多地域等价路由:保持預設值。

  5. 單擊返回路由表详情,返回到转发路由器路由表頁簽下。

  6. 在转发路由器路由表頁簽下,選擇剛剛建立的自訂路由表,單擊关联转发頁簽,然後單擊创建关联转发。

  7. 在添加关联转发對話方塊,選擇要關聯至該自訂路由表的網路執行個體串連,然後單擊確定。

    本文樣本中,分別將VPC1和VPC2關聯至該自訂路由表。關聯後,VPC1和VPC2將通過查詢該路由表進行流量轉寄。

  8. 在自訂路由表詳情頁面,單擊路由条目頁簽,然後單擊创建路由条目。

  9. 在添加路由条目對話方塊,根據以下資訊進行配置,然後單擊確定。

    • 路由表:系統預設選擇當前自訂路由表。

    • 所屬轉寄路由器:系統預設選擇當前地區的轉寄路由器。

    • 路由条目名称:輸入路由條目名稱。

    • 目的地址CIDR:輸入要添加的路由目標網段。本樣本輸入10.0.0.0/16。

    • 是否为黑洞路由:如果選擇路由為黑洞路由後,所有去往該路由的流量均會被丟棄。本樣本選擇否。

    • 下一跳连接:選擇路由的下一跳串連。本樣本選擇VPC3串連。

    • 路由条目描述:路由條目描述。

步驟四:為VPC添加預設路由條目

您需要在VPC控制台分別為VPC1、VPC2、VPC3添加網段為0.0.0.0/0,下一跳指向轉寄路由器的路由。

  1. 登入專用網路管理主控台。
  2. 在左側導覽列,單擊路由表。

  3. 在頂部功能表列,選擇路由表所屬的地區。

  4. 在路由表頁面,找到目標路由表,單擊路由表的ID。

    本樣本選擇VPC3的路由表。

  5. 在路由表執行個體詳情頁面,單擊路由條目列表頁簽下的自訂路由條目,然後單擊添加路由条目。

  6. 在添加路由条目面板,根據以下資訊配置路由條目,然後單擊確定。

    • 名稱:輸入路由條目的名稱。

    • 目标网段:輸入要添加的目標網段。本樣本輸入0.0.0.0/0。

    • 下一跳类型:選擇下一跳類型。本樣本選擇转发路由器。

    • 转发路由器:選擇網路執行個體串連。本樣本選擇VPC3串連。

    更多參數說明,請參見使用自訂路由表進行網路流量管理。

  7. 請重複步驟4到步驟6,分別為VPC1、VPC2添加網段為0.0.0.0/0,下一跳指向轉寄路由器的路由。

    在您完成配置後,您可以在雲企業網控制台轉寄路由器詳情頁面查看VPC1、VPC2、VPC3以及轉寄路由器路由表的路由資訊。

    1. 在轉寄路由器詳情頁面,單擊网络实例路由信息,分別查看VPC1、VPC2和VPC3的路由。

      1. 在轉寄路由器詳情頁面,單擊网络实例路由信息。

      2. 在網路執行個體後面,選擇VPC1、VPC2或VPC3的執行個體ID,查看路由。

        VPC1的路由資訊:在轉寄路由器執行個體的網路執行個體路由資訊頁簽下,選擇對應VPC網路執行個體,路由條目包含:

        • 目標網段 0.0.0.0/0(自訂路由,未發布,下一跳為轉寄路由器串連)

        • 目標網段 100.64.0.0/10(系統路由,未發布)

        • 目標網段 192.168.0.0/24(系統路由,發行)

        • 目標網段 192.168.1.0/24(系統路由,發行)

        VPC2的網路執行個體路由資訊中包含以下4條路由條目:

        • 目標網段 0.0.0.0/0,自訂路由,未發布,下一跳為跨地區串連執行個體。

        • 目標網段 100.64.0.0/10,系統路由,未發布。

        • 目標網段 172.16.0.0/24,系統路由,發行。

        • 目標網段 172.16.1.0/24,系統路由,發行。

        在轉寄路由器詳情頁面,單擊網路執行個體路由資訊頁簽,選擇網路執行個體VPC和對應路由表,查看路由條目:

        • 0.0.0.0/0:自訂路由,未發布,下一跳指向轉寄路由器串連(tr-attach)。

        • 10.0.0.0/24:系統路由,發行。

        • 10.0.1.0/24:系統路由,發行。

        • 100.64.0.0/10:系統路由,未發布。

    2. 您可以在转发路由器路由表頁簽下,查看轉寄路由器系統路由表已學習到的VPC1、VPC2、VPC3的路由。

      1. 在轉寄路由器詳情頁面,單擊转发路由器路由表。

      2. 在转发路由器路由表頁簽下,查看路由表路由條目。

        系統路由表(類型為系統)的路由條目詳情:路由條目均為自動學習類型,包含以下目標網段及對應下一跳串連執行個體:

        • 10.0.0.0/24 和 10.0.1.0/24,下一跳為 attach3(對應 vpc3)

        • 172.16.0.0/24 和 172.16.1.0/24,下一跳為 attach2(對應 vpc2)

        • 192.168.0.0/24 和 192.168.1.0/24,下一跳為 attach1(對應 vpc1)

        轉寄路由器自訂路由表詳情頁面顯示路由表類型為自訂,狀態為可用。路由條目列表中包含一條靜態路由:目標網段為10.0.0.0/16,下一跳指向VPC3對應的網路執行個體串連。

步驟五:驗證測試

完成上述配置後,您可以通過以下步驟,測試VPC1、VP2、VPC3之間的連通性。

說明

在您執行以下步驟前,請您先瞭解您VPC1、VPC2、VPC3中的ECS執行個體所應用的安全性群組規則,確保安全性群組規則允許三個VPC中的ECS執行個體之間可以互連。具體操作,請參見查詢安全性群組規則。

  1. 登入VPC1的ECS執行個體。具體操作,請參見選擇ECS遠端連線方式。

  2. 通過ping命令,ping VPC3下的ECS執行個體的IP地址,測試VPC1和VPC3之間的連通性。

    經驗證,VPC1和VPC3之間可以正常通訊。

    [root@iZrxxx3iiZ ~]# ping 10.0.0.112
    PING 10.0.0.112 (10.0.0.112) 56(84) bytes of data.
    64 bytes from 10.0.0.112: icmp_seq=1 ttl=64 time=0.835 ms
    64 bytes from 10.0.0.112: icmp_seq=2 ttl=64 time=0.582 ms
    64 bytes from 10.0.0.112: icmp_seq=3 ttl=64 time=0.587 ms
    64 bytes from 10.0.0.112: icmp_seq=4 ttl=64 time=0.584 ms
    ^C
    --- 10.0.0.112 ping statistics ---
    4 packets transmitted, 4 received, 0% packet loss, time 3112ms
    rtt min/avg/max/mdev = 0.582/0.647/0.835/0.108 ms
    [root@iZrj9fxxxmr3iiZ ~]#
  3. 登入VPC2的ECS執行個體,通過ping命令,ping VPC3下的ECS執行個體的IP地址,測試VPC2和VPC3之間的連通性。

    經驗證,VPC2和VPC3之間可以正常通訊。

    [root@iZrxxx a81Z ~]# ping 10.0.0.112
    PING 10.0.0.112 (10.0.0.112) 56(84) bytes of data.
    64 bytes from 10.0.0.112: icmp_seq=1 ttl=64 time=1.17 ms
    64 bytes from 10.0.0.112: icmp_seq=2 ttl=64 time=0.931 ms
    64 bytes from 10.0.0.112: icmp_seq=3 ttl=64 time=0.923 ms
    64 bytes from 10.0.0.112: icmp_seq=4 ttl=64 time=0.938 ms
    ^C
    --- 10.0.0.112 ping statistics ---
    4 packets transmitted, 4 received, 0% packet loss, time 3035ms
    rtt min/avg/max/mdev = 0.923/0.992/1.178/0.111 ms
    [root@iZrj906fxxx LZ ~]#
  4. 登入VPC1的ECS執行個體,通過ping命令,ping VPC2下的ECS執行個體的IP地址,測試VPC1和VPC2之間的連通性。

    經驗證,VPC1和VPC2之間不能通訊。

    [root@iZrjxxx r3iiZ ~]# ping 172.16.0.222
    PING 172.16.0.222 (172.16.0.222) 56(84) bytes of data.
    ^Z
    [5]+  Stopped                 ping 172.16.0.222
    [root@iZrj9f7xxx3iiZ ~]#

步驟六:跨帳號情境下的差異配置

本文前述步驟以VPC1、VPC2、VPC3與轉寄路由器同屬一個阿里雲帳號為例。如果共用服務VPC與業務VPC分屬不同阿里雲帳號(例如共用服務VPC由獨立的共用服務帳號持有,業務VPC分屬不同的業務帳號),可參考以下說明完成跨帳號部署。跨帳號情境下,隔離策略的實現機制與同帳號情境一致:VPC1、VPC2僅開啟自动传播系统路由至转发路由器的默认路由表,並關聯到轉寄路由器的自訂路由表,同時在自訂路由表中添加去往VPC3的路由,與網路執行個體歸屬哪個阿里雲帳號無關。

前置條件:完成跨帳號執行個體授權

在建立跨帳號的VPC串連前,需要由VPC所屬帳號先完成跨帳號執行個體授權,將許可權授予轉寄路由器所屬帳號。具體操作,請參見跨帳號執行個體授權。

操作差異:選擇「跨帳號」並指定VPC所屬帳號

在步驟二:建立VPC串連中,配置资源归属UID時:如果待串連的VPC與轉寄路由器執行個體同屬一個阿里雲帳號,選擇同账号;如果待串連的VPC與轉寄路由器執行個體分屬不同的阿里雲帳號,則選擇跨帳號,並輸入該VPC所屬的阿里雲帳號(主帳號)ID。其餘配置項與同帳號情境一致。參數說明請參見建立VPC串連。

操作主體:按帳號劃分執行方

  • 建立CEN執行個體、建立VPC串連、建立並配置自訂路由表及其路由條目(對應步驟一至步驟三)均在轉寄路由器所屬帳號下操作。

  • 步驟四:為VPC添加預設路由條目需由各VPC所屬的帳號分別在自己的VPC控制台中操作:即業務VPC所屬帳號為自己的VPC添加指向轉寄路由器的預設路由,共用服務VPC所屬帳號為自己的VPC添加相應路由。

完成上述配置後,跨帳號情境下VPC1、VPC2與VPC3之間的連通性驗證方法與「步驟五:驗證測試」一致。

跨帳號 VPC 路由策略隔離配置

跨帳號 VPC 接入雲企業網後,預設與雲企業網內其他 VPC 全互連。如果您需要在跨帳號情境下選擇性隔離部分 VPC 之間的互訪,無需改造前述的自訂路由表和關聯轉寄方案,可以在轉寄路由器路由表中配置路由策略(Route Map)實現。該方案與步驟六:跨帳號情境下的差異配置中介紹的自訂路由表隔離機制是兩種不同的實現方式,您可以根據需要選擇使用。

工作原理

路由策略通過控制平面過濾路由通告來實現隔離,而不是在資料面直接阻斷報文轉寄。也就是說,配置拒絕策略後,被拒絕一方的路由條目不會再被通告給對端,從而使雙方無法學習到彼此的路由、無法互連。

前置條件

路由策略僅對配置完成後新產生的路由通告生效,對已經通告成功、已經存在於路由表中的路由條目不生效。因此,在配置路由策略前,需要先刪除轉寄路由器路由表中雙方已經學習到的、需要隔離的路由條目,否則隔離不會立即生效。

配置拒絕路由策略

登入雲企業網控制台,在目標轉寄路由器詳情頁面的路由策略頁簽下建立路由策略(頁簽名稱以控制台實際顯示為準),並配置以下關鍵參數:

  • 策略行為:選擇拒絕(Deny)。

  • 優先順序:數值越小優先順序越高。本樣本設定為 20。

  • 生效方向:選擇出地區網關。

  • 源執行個體 ID 列表:填寫發起訪問一方的跨帳號 VPC 執行個體 ID。

  • 目的執行個體 ID 列表:填寫需要被隔離、拒絕訪問的 VPC 執行個體 ID。

儲存後,轉寄路由器將不再把目的執行個體的路由通告給源執行個體,雙方之間的路由不可達。

已知問題:控制台源執行個體 ID 列表下拉框可能為空白

如果 VPC 串連已經通過關聯轉寄關聯到路由表,控制台建立路由策略時的源執行個體 ID 列表下拉框可能顯示無可選項,無法通過控制台直接完成配置。遇到此問題時,建議調用 CreateCenRouteMap API,並在請求參數中直接傳入 vpc-xxx 格式的 VPC 執行個體 ID 建立路由策略,繞開控制台下拉框的限制。

驗證隔離是否生效

完成路由策略配置後,登入跨帳號 VPC 內的 ECS 執行個體,通過 ping 命令測試訪問已配置隔離的目標 VPC 內 ECS 執行個體的 IP 位址。如果隔離配置生效,ping 請求應無法訪問目標地址(100% 丟包)。

Terraform

您可以使用Terraform搭建本文樣本環境,關於Terraform的安裝和配置,請參考Install Terraform。

下面步驟以Linux主機運行Terraform v1.9.8為例進行介紹,操作前請確保您已經完成Authentication。

說明

本教程樣本包含的部分資源會產生一定費用,請在不需要時及時進行釋放或退訂。

第一步:建立資源

本文情境對應的Terraform代碼:

variable "pname" {
  description = "The prefix name for the resources"
  type        = string
  default     = "tf-CenSharedVpc"
}

variable "default_region" {
  description = "Default region"
  type        = string
  default     = "cn-hangzhou"
}

variable "az_list" {
  description = "List of availability zones to use"
  type        = list(string)
  default     = ["cn-hangzhou-j", "cn-hangzhou-k"]
}

variable "vpc_cidr_list" {
  description = "List of VPC CIDR block"
  type        = list(string)
  default     = ["192.168.0.0/16", "172.16.0.0/16", "10.0.0.0/16"]
}

variable "vsw_cidr_list" {
  description = "List of VSW CIDR block"
  type        = list(string)
  default = [
    "192.168.0.0/24", "192.168.1.0/24",
    "172.16.0.0/24", "172.16.1.0/24",
    "10.0.0.0/24", "10.0.1.0/24"
  ]
}

variable "ecs_ip_list" {
  description = "List of ECS ip"
  type        = list(string)
  default     = ["192.168.0.124", "172.16.0.222", "10.0.0.112"]
}

provider "alicloud" {
  region = var.default_region
}

# --- 3vpc 6vsw 3ecs
resource "alicloud_vpc" "vpc" {
  count      = length(var.vpc_cidr_list)
  vpc_name   = "${var.pname}-vpc${count.index + 1}"
  cidr_block = var.vpc_cidr_list[count.index]
}

resource "alicloud_vswitch" "vsw" {
  count        = length(var.vsw_cidr_list)
  vpc_id       = alicloud_vpc.vpc[floor(count.index / length(var.az_list))].id
  cidr_block   = var.vsw_cidr_list[count.index]
  zone_id      = var.az_list[count.index % length(var.az_list)]
  vswitch_name = "${var.pname}-vsw${count.index + 1}"
}

resource "alicloud_instance" "ecs" {
  count                = length(var.vpc_cidr_list)
  instance_name        = "${var.pname}-ecs${count.index + 1}"
  instance_type        = "ecs.e-c1m1.large"
  security_groups      = [alicloud_security_group.sg[count.index].id]
  vswitch_id           = alicloud_vswitch.vsw[count.index * length(var.az_list)].id
  image_id             = "aliyun_3_x64_20G_qboot_alibase_20230727.vhd"
  system_disk_category = "cloud_essd"
  private_ip           = var.ecs_ip_list[count.index]
  instance_charge_type = "PostPaid"
}

# --- 3 sg
resource "alicloud_security_group" "sg" {
  count  = length(var.vpc_cidr_list)
  name   = "${var.pname}-${count.index + 1}"
  vpc_id = alicloud_vpc.vpc[count.index].id
}

resource "alicloud_security_group_rule" "allow_inbound_ssh" {
  count             = length(var.vpc_cidr_list)
  type              = "ingress"
  ip_protocol       = "tcp"
  nic_type          = "intranet"
  policy            = "accept"
  port_range        = "22/22"
  priority          = 1
  security_group_id = alicloud_security_group.sg[count.index].id
  cidr_ip           = "0.0.0.0/0"
}

resource "alicloud_security_group_rule" "allow_inbound_icmp" {
  count             = length(var.vpc_cidr_list)
  type              = "ingress"
  ip_protocol       = "icmp"
  nic_type          = "intranet"
  policy            = "accept"
  port_range        = "-1/-1"
  priority          = 1
  security_group_id = alicloud_security_group.sg[count.index].id
  cidr_ip           = "0.0.0.0/0"
}

# --- cen and tr
resource "alicloud_cen_instance" "cen" {
  cen_instance_name = "${var.pname}-cen1"
}
resource "alicloud_cen_transit_router" "tr" {
  transit_router_name = "${var.pname}-tr"
  cen_id              = alicloud_cen_instance.cen.id
}
data "alicloud_cen_transit_router_route_tables" "tr" { # get tr sys table
  transit_router_id               = alicloud_cen_transit_router.tr.transit_router_id
  transit_router_route_table_type = "System"
}

# 3 attach
resource "alicloud_cen_transit_router_vpc_attachment" "attach" {
  count             = length(var.vpc_cidr_list)
  cen_id            = alicloud_cen_instance.cen.id
  transit_router_id = alicloud_cen_transit_router.tr.transit_router_id
  vpc_id            = alicloud_vpc.vpc[count.index].id
  zone_mappings {
    zone_id    = var.az_list[0]
    vswitch_id = alicloud_vswitch.vsw[count.index * length(var.az_list)].id
  }
  zone_mappings {
    zone_id    = var.az_list[1]
    vswitch_id = alicloud_vswitch.vsw[count.index * length(var.az_list) + 1].id
  }
  transit_router_vpc_attachment_name = "attach${count.index + 1}"
}

# 3 propa
resource "alicloud_cen_transit_router_route_table_propagation" "propa" {
  count                         = length(var.vpc_cidr_list)
  transit_router_route_table_id = data.alicloud_cen_transit_router_route_tables.tr.tables[0].id
  transit_router_attachment_id  = alicloud_cen_transit_router_vpc_attachment.attach[count.index].transit_router_attachment_id
}

# 1 custom_table
resource "alicloud_cen_transit_router_route_table" "custom_table" { # create tr custom_table
  transit_router_id               = alicloud_cen_transit_router.tr.transit_router_id
  transit_router_route_table_name = "custom_table"
}

resource "alicloud_cen_transit_router_route_entry" "tr_entry" {
  transit_router_route_table_id                     = alicloud_cen_transit_router_route_table.custom_table.transit_router_route_table_id
  transit_router_route_entry_destination_cidr_block = "10.0.0.0/16"
  transit_router_route_entry_next_hop_type          = "Attachment"
  transit_router_route_entry_name                   = "entry1_name"
  transit_router_route_entry_description            = "entry1_desc"
  transit_router_route_entry_next_hop_id            = alicloud_cen_transit_router_vpc_attachment.attach[2].transit_router_attachment_id
}

# associate attach1\2   custom_table
resource "alicloud_cen_transit_router_route_table_association" "ass1" {
  transit_router_route_table_id = alicloud_cen_transit_router_route_table.custom_table.transit_router_route_table_id
  transit_router_attachment_id  = alicloud_cen_transit_router_vpc_attachment.attach[0].transit_router_attachment_id
}
resource "alicloud_cen_transit_router_route_table_association" "ass2" {
  transit_router_route_table_id = alicloud_cen_transit_router_route_table.custom_table.transit_router_route_table_id
  transit_router_attachment_id  = alicloud_cen_transit_router_vpc_attachment.attach[1].transit_router_attachment_id
}
# ass attach3 sys_table
resource "alicloud_cen_transit_router_route_table_association" "ass3" {
  transit_router_route_table_id = data.alicloud_cen_transit_router_route_tables.tr.tables[0].id
  transit_router_attachment_id  = alicloud_cen_transit_router_vpc_attachment.attach[2].transit_router_attachment_id
}

# vpc entry
resource "alicloud_route_entry" "vpc_entry" {
  count                 = length(var.vpc_cidr_list)
  route_table_id        = alicloud_vpc.vpc[count.index].route_table_id
  destination_cidrblock = "0.0.0.0/0"
  nexthop_type          = "Attachment"
  nexthop_id            = alicloud_cen_transit_router_vpc_attachment.attach[count.index].transit_router_attachment_id
}

output "ecs1_login_address" {
  value = "https://ecs-workbench.alibabacloud.com/?from=EcsConsole&instanceType=ecs&regionId=${var.default_region}&instanceId=${alicloud_instance.ecs[0].id}"
}

output "ecs2_login_address" {
  value = "https://ecs-workbench.alibabacloud.com/?from=EcsConsole&instanceType=ecs&regionId=${var.default_region}&instanceId=${alicloud_instance.ecs[1].id}"
}

output "ecs3_login_address" {
  value = "https://ecs-workbench.alibabacloud.com/?from=EcsConsole&instanceType=ecs&regionId=${var.default_region}&instanceId=${alicloud_instance.ecs[2].id}"
}

第二步:驗證測試

您可以通過以下步驟,測試VPC1、VPC2、VPC3之間的連通性。

  1. 登入VPC1下的ECS1執行個體(執行個體名稱為tf-CenSharedVpc-ecs1)。

    您可以在Terraform的Outputs輸出中,找到ECS1的登入地址並複製到瀏覽器開啟,登入時注意認證方式選擇臨時SSH密鑰認證。

    Outputs:
    
    ecs1_login_address = "https://ecs-workbench.alibabacloud.com/?from=EcsConsole&instanceType=ecs&regionId=cn-hangzhou&instanceId=i-bp1g4zxxx"
    ecs2_login_address = "https://ecs-workbench.alibabacloud.com/?from=EcsConsole&instanceType=ecs&regionId=cn-hangzhou&instanceId=i-bp1ct8xxx"
    ecs3_login_address = "https://ecs-workbench.alibabacloud.com/?from=EcsConsole&instanceType=ecs&regionId=cn-hangzhou&instanceId=i-bp1iiwxxx"
  2. 通過ping命令,ping VPC3下的ECS3執行個體的IP地址,測試VPC1和VPC3之間的連通性。

    ping 10.0.0.112

    經驗證,VPC1和VPC3之間可以正常通訊。

    [root@iZrxxx3iiZ ~]# ping 10.0.0.112
    PING 10.0.0.112 (10.0.0.112) 56(84) bytes of data.
    64 bytes from 10.0.0.112: icmp_seq=1 ttl=64 time=0.835 ms
    64 bytes from 10.0.0.112: icmp_seq=2 ttl=64 time=0.582 ms
    64 bytes from 10.0.0.112: icmp_seq=3 ttl=64 time=0.587 ms
    64 bytes from 10.0.0.112: icmp_seq=4 ttl=64 time=0.584 ms
    ^C
    --- 10.0.0.112 ping statistics ---
    4 packets transmitted, 4 received, 0% packet loss, time 3112ms
    rtt min/avg/max/mdev = 0.582/0.647/0.835/0.108 ms
    [root@iZrj9fxxxmr3iiZ ~]#
  3. 登入VPC2下的ECS2執行個體(執行個體名稱為tf-CenSharedVpc-ecs2),通過ping命令,ping VPC3下的ECS3執行個體的IP地址,測試VPC2和VPC3之間的連通性。

    ping 10.0.0.112

    經驗證,VPC2和VPC3之間可以正常通訊。

    [root@iZrxxx a81Z ~]# ping 10.0.0.112
    PING 10.0.0.112 (10.0.0.112) 56(84) bytes of data.
    64 bytes from 10.0.0.112: icmp_seq=1 ttl=64 time=1.17 ms
    64 bytes from 10.0.0.112: icmp_seq=2 ttl=64 time=0.931 ms
    64 bytes from 10.0.0.112: icmp_seq=3 ttl=64 time=0.923 ms
    64 bytes from 10.0.0.112: icmp_seq=4 ttl=64 time=0.938 ms
    ^C
    --- 10.0.0.112 ping statistics ---
    4 packets transmitted, 4 received, 0% packet loss, time 3035ms
    rtt min/avg/max/mdev = 0.923/0.992/1.178/0.111 ms
    [root@iZrj906fxxx LZ ~]#
  4. 登入VPC1下的ECS1執行個體(執行個體名稱為tf-CenSharedVpc-ecs1),通過ping命令,ping VPC2下的ECS2執行個體的IP地址,測試VPC1和VPC2之間的連通性。

    ping 172.16.0.222

    經驗證,VPC1和VPC2之間不能通訊。

    [root@iZrjxxx r3iiZ ~]# ping 172.16.0.222
    PING 172.16.0.222 (172.16.0.222) 56(84) bytes of data.
    ^Z
    [5]+  Stopped                 ping 172.16.0.222
    [root@iZrj9f7xxx3iiZ ~]#

第三步:釋放資源

驗證完畢後,如果您不再使用資源,請執行以下命令釋放資源,防止繼續計費。

terraform destroy --auto-approve