通过企业版转发路由器实现ECS私网访问跨地域的OSS服务

更新时间:
复制 MD 格式

本文介绍如何通过企业版转发路由器实现专有网络VPC(Virtual Private Cloud)中的云服务器ECS(Elastic Compute Service)私网访问跨地域的对象存储OSS(Object Storage Service)服务。

说明

本教程所含示例代码支持一键运行,您可以直接运行代码。一键运行

场景示例

image

本文以上图场景为例。某企业在华东2(上海)地域下拥有一个VPC1,VPC1中使用ECS部署了一些应用服务。企业在华东1(杭州)地域部署了OSS服务,企业希望VPC1下的ECS实例可以私网访问华东1(杭州)地域下的OSS服务以获取相关资源。

OSS是地域级别的云服务,不属于任何VPC,但同地域的VPC可以通过OSS内网地址访问OSS服务。因此,企业需要在OSS所属的华东1(杭州)地域创建一个VPC2作为中转网络,然后将VPC1VPC2分别连接至各自地域的企业版转发路由器,并在两个转发路由器之间创建跨地域连接。同时,在VPC1和华东1(杭州)的转发路由器中手动添加OSS内网网段的路由。配置完成后,VPC1ECS实例访问OSS的数据流向为:ECS实例 → 华东2(上海)转发路由器 → 跨地域连接 → 华东1(杭州)转发路由器 → VPC2 → OSS内网端点。

说明

VPC2在本方案中仅作为中转网络,用于为跨地域流量提供到达OSS内网端点的路径。如果您在华东1(杭州)地域已有VPC实例,可以直接将其连接至企业版转发路由器作为中转,无需新建VPC2。

网段规划

重要

在您规划网段时,请确保VPC之间要互通的网段没有重叠。

资源

VPC所属地域

网段及IP地址

VPC1

华东2(上海)

主网段:192.168.0.0/16

  • 交换机1网段:192.168.0.0/24,交换机1位于可用区M。

  • 交换机2网段:192.168.20.0/24,交换机2位于可用区N。

  • ECS IP地址:192.168.0.1,ECS实例位于交换机1下。

VPC2

华东1(杭州)

主网段:172.16.0.0/16

  • 交换机1网段:172.16.1.0/24,交换机1位于可用区J。

  • 交换机2网段:172.16.2.0/24,交换机2位于可用区K。

操作步骤

本文提供控制台和Terraform两种配置方式,请按需选择。

控制台

准备工作

在开始配置前,请确保您已完成以下准备。各资源的网段信息请参见上方网段规划章节。

  • 华东2(上海)地域:已创建VPC1(主网段192.168.0.0/16),VPC1中已在2个可用区分别创建交换机,每个交换机至少拥有一个空闲IP地址,并在其中一个交换机下部署了ECS实例。具体操作,请参见搭建IPv4专有网络

  • 华东1(杭州)地域:已部署OSS服务(即已创建OSS Bucket)。如果未创建,请参见快速入门

  • 已确保VPC1的安全组规则允许相关流量通行。具体操作,请参见查询安全组规则添加安全组规则

步骤一:创建中转VPC

在华东1(杭州)地域创建VPC2(主网段172.16.0.0/16),并在2个可用区分别创建交换机,每个交换机至少拥有一个空闲IP地址。VPC2在本方案中作为访问OSS服务的中转网络。如果您在华东1(杭州)地域已有VPC实例,可以跳过本步骤,直接在步骤二中选择该VPC。具体操作,请参见创建和管理专有网络

VPC2创建完成后,请确保其安全组规则允许相关流量通行,避免拦截来自VPC1的跨地域访问流量。具体操作,请参见查询安全组规则添加安全组规则

步骤二:通过场景化组网创建网络连接

使用云企业网的场景化组网工具,自动批量完成云企业网实例、企业版转发路由器、VPC连接和跨地域连接的创建及路由配置。

  1. 登录云企业网控制台,在云企业网实例页面,单击创建云企业网实例

  2. 创建云企业网实例对话框,选择场景化创建(推荐),场景选择云上多VPC互联,单击开始场景化创建

  3. 在第一个地域页签下,添加组网配置:

    • 地域:选择华东1(杭州)

    • 可用区:选中可用区J和可用区K。

    • VPC:选择VPC2,并选择VPC2对应的2个交换机。

  4. 单击页签右侧的+,新建一个地域页签,添加组网配置:

    • 地域:选择华东2(上海)

    • 可用区:选中可用区M和可用区N。

    • VPC:选择VPC1,并选择VPC1对应的2个交换机。

  5. 单击下一步。系统需要几分钟来生成配置概览,请在确认组网配置及费用页面查看将要自动创建的资源和费用明细,确认无误后单击开始部署

  6. 部署时间预计约10分钟,请耐心等待。部署完成后,系统自动创建以下资源:

    • 一个云企业网实例。

    • 华东1(杭州)和华东2(上海)各一个企业版转发路由器。

    • VPC1VPC2分别到各自地域转发路由器的VPC连接。

    • 两个转发路由器之间的跨地域连接。

说明

场景化组网完成后,VPC1VPC2之间已可以私网互通,但VPC1中的ECS实例还无法访问OSS服务。您需要继续执行后续步骤,手动添加OSS内网网段的路由。

步骤三:在VPC中配置OSS服务的路由

创建跨地域连接后,VPC1VPC2可以通过企业版转发路由器实现私网互通,但是VPC1中的ECS实例依旧无法通过企业版转发路由器和VPC2私网访问OSS服务,您需要在VPC1的路由表中添加OSS服务的路由,引导VPC1访问OSS服务的流量进入企业版转发路由器。

  1. 登录专有网络管理控制台
  2. 在顶部菜单栏,选择VPC1实例所属的地域。

    本文选择华东2(上海)地域。

  3. 在左侧导航栏,单击路由表

  4. 路由表页面,找到VPC1实例的路由表,单击路由表实例ID。

    本文中VPC1仅拥有一张系统路由表,如果您的VPC中拥有多张路由表,请选择ECS实例所在交换机关联的路由表。

  5. 路由条目列表页签下单击自定义路由条目页签,然后单击添加路由条目

  6. 添加路由条目面板,配置以下信息,然后单击确定

    请根据以下信息将华东1(杭州)地域下OSS服务所有网段的路由均添加至VPC1的路由表中。

    华东1(杭州)地域下OSS服务所有网段的信息,请参见通过EndpointBucket域名访问OSS

    配置项

    配置项说明

    路由条目1

    路由条目2

    路由条目3

    路由条目4

    名称

    输入自定义路由条目的名称。

    OSS网段1

    OSS网段2

    OSS网段3

    OSS网段4

    目标网段

    输入目标网段。

    100.118.28.0/24

    100.114.102.0/24

    100.98.170.0/24

    100.118.31.0/24

    下一跳类型

    选择自定义路由条目的下一跳类型,并选择下一跳。

    选择转发路由器,然后选择VPC1连接。

    选择转发路由器,然后选择VPC1连接。

    选择转发路由器,然后选择VPC1连接。

    选择转发路由器,然后选择VPC1连接。

步骤四:在转发路由器中配置OSS服务的路由

您还需要在华东1(杭州)地域的企业版转发路由器路由表下添加OSS服务的路由,在VPC1ECS实例访问OSS服务的流量进入企业版转发路由器后,企业版转发路由器可以根据OSS服务的路由将流量引导至VPC2,然后ECS实例可通过VPC2私网访问OSS服务。

  1. 登录云企业网管理控制台

  2. 云企业网页面,找到目标云企业网实例,单击云企业网实例ID。

  3. 基本信息 > 转发路由器页签,找到华东1(杭州)地域下的转发路由器实例,单击实例ID。

  4. 在转发路由器实例详情页面,单击转发路由器路由表页签,在页签左侧选择目标转发路由器路由表。

    由于VPC1连接和VPC2连接均采用了默认高级配置,均与转发路由器的默认路由表建立了关联转发关系,因此本文选择转发路由器的默认路由表(即系统路由表)。

  5. 路由条目页签下,单击创建路由条目

  6. 添加路由条目对话框,根据以下信息进行配置,然后单击确定

    请根据以下信息将华东1(杭州)地域下OSS服务所有网段的路由均添加至转发路由器的路由表中。

    配置项

    配置项说明

    路由条目1

    路由条目2

    路由条目3

    路由条目4

    路由条目名称

    输入路由条目的名称。

    OSS网段1

    OSS网段2

    OSS网段3

    OSS网段4

    目的地址CIDR

    输入路由条目的目标网段。

    100.118.28.0/24

    100.114.102.0/24

    100.98.170.0/24

    100.118.31.0/24

    是否为黑洞路由

    选择当前路由条目是否为黑洞路由。

    • :表示该路由为黑洞路由,所有去往该路由的流量均会被丢弃。

    • :表示该路由不为黑洞路由,需要您设置路由的下一跳连接。

    选择

    选择

    选择

    选择

    下一跳连接

    选择路由条目的下一跳连接。

    选择VPC2连接

    选择VPC2连接

    选择VPC2连接

    选择VPC2连接

步骤五:测试连通性

完成上述配置后,VPC1中的ECS实例可以私网访问跨地域的OSS服务了。本文以ECS下载OSS服务中的一张图片为例测试VPC1ECS实例和OSS服务之间的连通性。

  1. 登录VPC1实例下的ECS实例。具体操作,请参见ECS远程连接操作指南

  2. ECS实例中尝试下载OSS服务下一张名为OSStest.jgp的图片。

    说明

    在您测试前请确保目标文件拥有的读写权限允许其被ECS实例访问。更多信息,请参见权限与访问控制概述

    wget https://zxtXXXXX.oss-cn-hangzhou-internal.aliyuncs.com/OSStest.jpg
    #“zxtXXXXX.oss-cn-hangzhou-internal.aliyuncs.com”为OSS服务访问域名。
    #“OSStest.jpg”为目标文件名称。

    关于OSS访问域名的更多信息,请参见通过IPv6协议访问OSS

    如果ECS可以收到如下所示的回复,则证明ECS已经可以私网访问跨地域的OSS服务了。

    [root@iZuf6bxxx hblZ ~]# wget https://zxxx2.oss-cn-hangzhou-internal.aliyuncs.com/OSStest.jpg
    --2023-01-29 16:54:46--  https://zxtxxx2.oss-cn-hangzhou-internal.aliyuncs.com/OSStest.jpg
    Resolving zxtxxx2.oss-cn-hangzhou-internal.aliyuncs.com (zxtxxx2.oss-cn-hangzhou-internal.aliyuncs.com)... 100.xxx.50, 100.xxx.49, 100.
    45, ...
    Connecting to zxtxxx2.oss-cn-hangzhou-internal.aliyuncs.com (zxxxx s2.oss-cn-hangzhou-internal.aliyuncs.com)|100.xxx.50|:443... connected.
    HTTP request sent, awaiting response... 200 OK
    Length: 611894 (598K) [image/jpeg]
    Saving to: 'OSStest.jpg.5'
    OSStest.jpg.5                 100%[=================================================>] 597.55K     132KB/s    in 4.5s
    2023-01-29 16:54:51 (132 KB/s) - 'OSStest.jpg.5' saved [611894/611894]

Terraform

您可以使用Terraform搭建本文示例环境,关于Terraform的安装和配置,请参考Install Terraform

下面步骤以Linux主机运行Terraform v1.9.8为例进行介绍,操作前请确保您已经完成Authentication

说明

本教程示例包含的部分资源会产生一定费用,请在不需要时及时进行释放或退订。

第一步:创建资源

  1. 为本文的实践场景创建一个目录,并进入该目录。

    mkdir tf-cen-oss && cd tf-cen-oss
  2. 创建一个main.tf文件,用于定义资源信息。

    touch main.tf
  3. 打开main.tf文件,复制如下代码,粘贴到文件中并保存。此文件包含了本文实践场景中需要用到的资源和对应配置。

    variable "pname" {
      description = "The prefix name for resources"
      type        = string
      default     = "tf-cen-oss"
    }
    variable "region_id_hangzhou" {
      description = "The region id of hangzhou"
      type        = string
      default     = "cn-hangzhou"
    }
    variable "region_id_shanghai" { #
      description = "The region id of shanghai"
      type        = string
      default     = "cn-shanghai"
    }
    variable "az_hangzhou" {
      description = "List of availability zones to use"
      type        = list(string)
      default     = ["cn-hangzhou-j", "cn-hangzhou-k"]
    }
    variable "az_shanghai" {
      description = "List of availability zones to use"
      type        = list(string)
      default     = ["cn-shanghai-m", "cn-shanghai-n"]
    }
    variable "cidr_list" {
      description = "List of VPC CIDR block"
      type        = list(string)
      default     = ["10.0.0.0/8", "172.16.0.0/12", "192.168.0.0/16"]
    }
    # --- provider ---
    provider "alicloud" { # default region hangzhou
      region = var.region_id_hangzhou
    }
    provider "alicloud" {
      alias  = "hangzhou"
      region = var.region_id_hangzhou
    }
    provider "alicloud" {
      alias  = "shanghai"
      region = var.region_id_shanghai
    }
    # ---  oss ---
    resource "random_uuid" "default" {
    }
    resource "alicloud_oss_bucket" "bucket1" {
      provider = alicloud.hangzhou
      bucket   = substr("${var.pname}-${replace(random_uuid.default.result, "-", "")}", 0, 32)
    }
    resource "alicloud_oss_bucket_policy" "default" {
      provider = alicloud.hangzhou
      policy   = jsonencode({ "Version" : "1", "Statement" : [{ "Action" : ["oss:GetObject"], "Effect" : "Allow", "Resource" : ["acs:oss:*:*:${alicloud_oss_bucket.bucket1.bucket}"] }] })
      bucket   = alicloud_oss_bucket.bucket1.bucket
    }
    resource "alicloud_oss_bucket_object" "obj1" {
      provider = alicloud.hangzhou
      bucket   = alicloud_oss_bucket.bucket1.bucket
      key      = "example.txt"                     # Name of the file in the bucket
      content  = "this is example text content \n" # Content of the file
      acl      = "public-read"
    }
    # --- vpc ---
    resource "alicloud_vpc" "vpc1" {
      provider   = alicloud.shanghai
      vpc_name   = "${var.pname}-1"
      cidr_block = "192.168.0.0/16"
    }
    resource "alicloud_vpc" "vpc2" {
      provider   = alicloud.hangzhou
      vpc_name   = "${var.pname}-2"
      cidr_block = "172.16.0.0/16"
    }
    resource "alicloud_vswitch" "vsw1-1" {
      provider     = alicloud.shanghai
      vpc_id       = alicloud_vpc.vpc1.id
      cidr_block   = "192.168.0.0/24"
      zone_id      = var.az_shanghai[0]
      vswitch_name = "${var.pname}-vsw1-1"
    }
    resource "alicloud_vswitch" "vsw1-2" {
      provider     = alicloud.shanghai
      vpc_id       = alicloud_vpc.vpc1.id
      cidr_block   = "192.168.1.0/24"
      zone_id      = var.az_shanghai[1]
      vswitch_name = "${var.pname}-vsw1-2"
    }
    resource "alicloud_vswitch" "vsw2-1" {
      provider     = alicloud.hangzhou
      vpc_id       = alicloud_vpc.vpc2.id
      cidr_block   = "172.16.0.0/24"
      zone_id      = var.az_hangzhou[0]
      vswitch_name = "${var.pname}-vsw2-1"
    }
    resource "alicloud_vswitch" "vsw2-2" {
      provider     = alicloud.hangzhou
      vpc_id       = alicloud_vpc.vpc2.id
      cidr_block   = "172.16.1.0/24"
      zone_id      = var.az_hangzhou[1]
      vswitch_name = "${var.pname}-vsw2-2"
    }
    # --- cen ---
    # cen
    resource "alicloud_cen_instance" "cen1" {
      cen_instance_name = "${var.pname}-cen1"
    }
    # tr
    resource "alicloud_cen_transit_router" "tr1" {
      provider            = alicloud.shanghai
      transit_router_name = "${var.pname}-tr1"
      cen_id              = alicloud_cen_instance.cen1.id
    }
    resource "alicloud_cen_transit_router" "tr2" {
      provider            = alicloud.hangzhou
      transit_router_name = "${var.pname}-tr2"
      cen_id              = alicloud_cen_instance.cen1.id
    }
    data "alicloud_cen_transit_router_route_tables" "tr1" { # get tr sys table
      transit_router_id               = alicloud_cen_transit_router.tr1.transit_router_id
      transit_router_route_table_type = "System"
    }
    data "alicloud_cen_transit_router_route_tables" "tr2" {
      transit_router_id               = alicloud_cen_transit_router.tr2.transit_router_id
      transit_router_route_table_type = "System"
    }
    # tr-peer
    resource "alicloud_cen_transit_router_peer_attachment" "peer" {
      provider                      = alicloud.shanghai
      cen_id                        = alicloud_cen_instance.cen1.id
      transit_router_id             = alicloud_cen_transit_router.tr1.transit_router_id
      peer_transit_router_region_id = var.region_id_hangzhou
      peer_transit_router_id        = alicloud_cen_transit_router.tr2.transit_router_id
      bandwidth_type                = "DataTransfer"
      bandwidth                     = 1
      auto_publish_route_enabled    = true # default is false
    }
    resource "alicloud_cen_transit_router_route_table_association" "ass_peer1" {
      transit_router_route_table_id = data.alicloud_cen_transit_router_route_tables.tr1.tables[0].id
      transit_router_attachment_id  = alicloud_cen_transit_router_peer_attachment.peer.transit_router_attachment_id
    }
    resource "alicloud_cen_transit_router_route_table_propagation" "propa_peer1" {
      transit_router_route_table_id = data.alicloud_cen_transit_router_route_tables.tr1.tables[0].id
      transit_router_attachment_id  = alicloud_cen_transit_router_peer_attachment.peer.transit_router_attachment_id
    }
    resource "alicloud_cen_transit_router_route_table_association" "ass_peer2" {
      transit_router_route_table_id = data.alicloud_cen_transit_router_route_tables.tr2.tables[0].id
      transit_router_attachment_id  = alicloud_cen_transit_router_peer_attachment.peer.transit_router_attachment_id
    }
    resource "alicloud_cen_transit_router_route_table_propagation" "propa_peer2" {
      transit_router_route_table_id = data.alicloud_cen_transit_router_route_tables.tr2.tables[0].id
      transit_router_attachment_id  = alicloud_cen_transit_router_peer_attachment.peer.transit_router_attachment_id
    }
    # attach1  
    resource "alicloud_cen_transit_router_vpc_attachment" "attach1" {
      provider          = alicloud.shanghai
      cen_id            = alicloud_cen_instance.cen1.id
      transit_router_id = alicloud_cen_transit_router.tr1.transit_router_id
      vpc_id            = alicloud_vpc.vpc1.id
      zone_mappings {
        zone_id    = var.az_shanghai[0]
        vswitch_id = alicloud_vswitch.vsw1-1.id
      }
      zone_mappings {
        zone_id    = var.az_shanghai[1]
        vswitch_id = alicloud_vswitch.vsw1-2.id
      }
      transit_router_vpc_attachment_name = "attach1"
    }
    resource "alicloud_cen_transit_router_route_table_association" "ass1" {
      transit_router_route_table_id = data.alicloud_cen_transit_router_route_tables.tr1.tables[0].id
      transit_router_attachment_id  = alicloud_cen_transit_router_vpc_attachment.attach1.transit_router_attachment_id
    }
    resource "alicloud_cen_transit_router_route_table_propagation" "propa1" {
      transit_router_route_table_id = data.alicloud_cen_transit_router_route_tables.tr1.tables[0].id
      transit_router_attachment_id  = alicloud_cen_transit_router_vpc_attachment.attach1.transit_router_attachment_id
    }
    resource "alicloud_route_entry" "vpc1_to_tr1" {
      provider              = alicloud.shanghai
      count                 = 3
      route_table_id        = alicloud_vpc.vpc1.route_table_id
      destination_cidrblock = var.cidr_list[count.index]
      nexthop_type          = "Attachment"
      nexthop_id            = alicloud_cen_transit_router_vpc_attachment.attach1.transit_router_attachment_id
    }
    # attach2
    resource "alicloud_cen_transit_router_vpc_attachment" "attach2" {
      provider          = alicloud.hangzhou
      cen_id            = alicloud_cen_instance.cen1.id
      transit_router_id = alicloud_cen_transit_router.tr2.transit_router_id
      vpc_id            = alicloud_vpc.vpc2.id
      zone_mappings {
        zone_id    = var.az_hangzhou[0]
        vswitch_id = alicloud_vswitch.vsw2-1.id
      }
      zone_mappings {
        zone_id    = var.az_hangzhou[1]
        vswitch_id = alicloud_vswitch.vsw2-2.id
      }
      transit_router_vpc_attachment_name = "attach2"
    }
    resource "alicloud_cen_transit_router_route_table_association" "ass2" {
      transit_router_route_table_id = data.alicloud_cen_transit_router_route_tables.tr2.tables[0].id
      transit_router_attachment_id  = alicloud_cen_transit_router_vpc_attachment.attach2.transit_router_attachment_id
    }
    resource "alicloud_cen_transit_router_route_table_propagation" "propa2" {
      transit_router_route_table_id = data.alicloud_cen_transit_router_route_tables.tr2.tables[0].id
      transit_router_attachment_id  = alicloud_cen_transit_router_vpc_attachment.attach2.transit_router_attachment_id
    }
    resource "alicloud_route_entry" "vpc2_to_tr2" {
      provider              = alicloud.hangzhou
      count                 = 3
      route_table_id        = alicloud_vpc.vpc2.route_table_id
      destination_cidrblock = var.cidr_list[count.index]
      nexthop_type          = "Attachment"
      nexthop_id            = alicloud_cen_transit_router_vpc_attachment.attach2.transit_router_attachment_id
    }
    # oss_cidr
    variable "oss_cidr" {
      description = "The OSS CIDR block"
      type        = list(string)
      default     = ["100.118.28.0/24", "100.114.102.0/24", "100.98.170.0/24", "100.118.31.0/24"]
    }
    # vpc entry
    resource "alicloud_route_entry" "entry" {
      provider              = alicloud.shanghai
      count                 = 4
      route_table_id        = alicloud_vpc.vpc1.route_table_id
      destination_cidrblock = var.oss_cidr[count.index]
      nexthop_type          = "Attachment"
      nexthop_id            = alicloud_cen_transit_router_vpc_attachment.attach1.transit_router_attachment_id
    }
    # tr entry 
    resource "alicloud_cen_transit_router_route_entry" "tr2_rt1_entry1" {
      count                                             = 4
      transit_router_route_table_id                     = data.alicloud_cen_transit_router_route_tables.tr2.tables[0].id
      transit_router_route_entry_destination_cidr_block = var.oss_cidr[count.index]
      transit_router_route_entry_next_hop_type          = "Attachment"
      transit_router_route_entry_next_hop_id            = alicloud_cen_transit_router_vpc_attachment.attach2.transit_router_attachment_id
    }
    # --- ecs ---
    resource "alicloud_instance" "main" {
      provider             = alicloud.shanghai
      depends_on           = [alicloud_cen_transit_router_route_entry.tr2_rt1_entry1]
      instance_name        = "${var.pname}-ecs"
      instance_type        = "ecs.e-c1m1.large"
      security_groups      = [alicloud_security_group.default.id]
      vswitch_id           = alicloud_vswitch.vsw1-1.id
      image_id             = "aliyun_3_x64_20G_qboot_alibase_20230727.vhd"
      system_disk_category = "cloud_essd"
      private_ip           = "192.168.0.1"
      instance_charge_type = "PostPaid"
      user_data = base64encode(<<-EOT
        #!/bin/bash
        curl  https://${alicloud_oss_bucket.bucket1.bucket}.${alicloud_oss_bucket.bucket1.intranet_endpoint}/${alicloud_oss_bucket_object.obj1.key}  > /root/curl.txt
      EOT
      )
    }
    # sg
    resource "alicloud_security_group" "default" {
      provider = alicloud.shanghai
      name     = var.pname
      vpc_id   = alicloud_vpc.vpc1.id
    }
    resource "alicloud_security_group_rule" "allow_inbound_ssh" {
      provider          = alicloud.shanghai
      type              = "ingress"
      ip_protocol       = "tcp"
      nic_type          = "intranet"
      policy            = "accept"
      port_range        = "22/22"
      priority          = 1
      security_group_id = alicloud_security_group.default.id
      cidr_ip           = "0.0.0.0/0"
    }
    resource "alicloud_security_group_rule" "allow_inbound_icmp" {
      provider          = alicloud.shanghai
      type              = "ingress"
      ip_protocol       = "icmp"
      nic_type          = "intranet"
      policy            = "accept"
      port_range        = "-1/-1"
      priority          = 1
      security_group_id = alicloud_security_group.default.id
      cidr_ip           = "0.0.0.0/0"
    }
    # --- output ---
    output "ecs_login_address" {
      value = "https://ecs-workbench.aliyun.com/?from=EcsConsole&instanceType=ecs&regionId=${var.region_id_shanghai}&instanceId=${alicloud_instance.main.id}"
    }
    output "test_command" {
      value = "curl ${alicloud_oss_bucket.bucket1.bucket}.${alicloud_oss_bucket.bucket1.intranet_endpoint}/${alicloud_oss_bucket_object.obj1.key}"
    }
  4. 初始化目录,完成Terraform的初始化配置。

    terraform init
  5. 创建资源。执行后Terraform会先预览将要创建的资源,确认无误后,输入yes正式开始创建。

    terraform apply

第二步:验证测试

  1. 登录ECS实例(名称为tf-cen-oss-ecs)。

    您可以在TerraformOutputs输出中,找到对应ECS的登录地址并复制到浏览器打开,登录时注意认证方式选择临时SSH密钥认证

    Outputs:
    ecs_login_address = "https://ecs-workbench.aliyun.com/?from=EcsConsole&instanceType=ecs&regionId=cn-shanghai&instanceId=i-uf6xxx"
    test_command = "curl xxx"
  2. Outputs输出中,复制curl开头的命令:

    Outputs:
    ecs_login_address = "https://ecs-workbench.aliyun.com/?from=EcsConsole&instanceType=ecs&regionId=cn-shanghai"
    test_command = "curl tf-cen-oss-xxx.oss-cn-hangzhou-internal.aliyuncs.com/example.txt"
  3. ECS实例中执行curl命令:

    curl tf-cen-oss-xxxxxx.oss-cn-hangzhou-internal.aliyuncs.com/example.txt
    [root@iZuf6xxx          ~]# curl tf-cen-oss-2821xxx xxx.oss-cn-hangzhou-internal.aliyuncs.com/example.txt
    this is example text content
    [root@iZuf6xxx          ~]#

    如上所示,如果能获取到文本内容,则说明访问成功。

第三步:释放资源

验证完毕后,如果您不再使用资源,请执行以下命令释放资源,防止继续计费。

terraform destroy --auto-approve

路由说明

在本文中,使用场景化组网工具自动创建VPC连接、跨地域连接时均采用默认路由配置,默认路由配置下云企业网会自动完成路由的分发和学习以实现VPC1VPC2之间的相互通信。默认路由配置说明如下:

VPC

创建VPC连接时如果采用默认路由配置(即开启所有高级配置),则系统会自动对VPC进行以下路由配置:

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

    开启本功能后,VPC连接会自动关联至转发路由器的默认路由表,转发路由器通过查询默认路由表转发VPC的流量。

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

    开启本功能后,VPC会将自身的系统路由传播至转发路由器的默认路由表中,用于网络实例的互通。

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

    开启本功能后,系统将在VPC实例的所有路由表内自动配置10.0.0.0/8、172.16.0.0/12、192.168.0.0/16三条路由条目,其下一跳均指向VPC连接。

跨地域连接

创建跨地域连接时如果采用默认路由配置(即开启所有高级配置),则系统会自动对跨地域连接进行以下路由配置:

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

    开启本功能后,跨地域连接将与两个地域的转发路由器的默认路由表建立关联转发关系,两个地域的转发路由器将会通过查询默认路由表转发跨地域间的流量。

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

    开启本功能后,跨地域连接将与两个地域的转发路由器的默认路由表建立路由学习关系。

  • 自动发布路由到对端地域

    开启本功能后,即允许跨地域连接将本端转发路由器路由表(指与跨地域连接建立关联转发关系的路由表)下的路由自动传播至对端转发路由器的路由表(指与跨地域连接建立路由学习关系的路由表)中,用于网络实例跨地域互通。

查看路由条目

您可以在阿里云管理控制台查看对应实例的路由条目信息: