Cloud Enterprise Network (CEN) admite directivas flexibles de conectividad, aislamiento y redirección de tráfico dentro de una región. Este tutorial describe cómo permitir que las VPC aisladas accedan a una VPC de servicios compartidos y, al mismo tiempo, mantenerlas aisladas entre sí.
Contexto
Una empresa tiene tres VPC desplegadas en la región China (Hangzhou). VPC3 aloja los servicios compartidos. El objetivo es permitir que VPC1 y VPC2 accedan a VPC3, pero que se mantengan aisladas entre sí.
Planificación de la red
Utilice las tablas de rutas personalizadas de CEN, las asociaciones de tablas de rutas y el aprendizaje de rutas para configurar los segmentos de red y el enrutamiento de la siguiente manera:
En este ejemplo, las tres VPC y el transit router pertenecen a la misma cuenta de Alibaba Cloud. Para un despliegue entre cuentas, consulte la sección "Aislamiento de rutas de VPC entre cuentas".
-
Cuando conecte VPC3 al transit router, habilite las configuraciones avanzadas Associate with Default Route Table of Transit Router y Propagate system routes to transit router route table.
La tabla de rutas del sistema del transit router aprende automáticamente las rutas de VPC3. Además, VPC3 reenvía el tráfico mediante esta tabla de rutas del sistema.
-
Al conectar VPC1 y VPC2 al transit router, habilite únicamente la configuración avanzada Propagate system routes to transit router route table. Después, asocie VPC1 y VPC2 con una tabla de rutas personalizada en el transit router y agregue una entrada de ruta personalizada que apunte a VPC3.
La tabla de rutas del sistema del transit router aprende las rutas de VPC1 y VPC2. Estas dos VPC reenvían el tráfico hacia VPC3 a través de la tabla de rutas personalizada, lo cual impide que se comuniquen entre sí.
Agregue una ruta hacia 0.0.0.0/0 en las tablas de rutas de VPC1, VPC2 y VPC3. Establezca el tránsito siguiente de esta ruta hacia el transit router.
-
A continuación se detalla el plan de red para las VPC.
ImportanteAl planificar la red, asegúrese de que los bloques CIDR de las VPC no se superpongan.
VPC
vSwitch
Zona del vSwitch
Bloque CIDR
ECS
VPC1
Bloque CIDR principal: 192.168.0.0/16
vSwitch1
Zone A
192.168.0.0/24
Dirección de ECS1:
192.168.0.224
vSwitch2
Zone B
192.168.1.0/24
VPC2
Bloque CIDR principal: 172.16.0.0/16
vSwitch3
Zone A
172.16.0.0/24
Dirección de ECS2:
172.16.0.222
vSwitch4
Zone B
172.16.1.0/24
VPC3
Bloque CIDR principal: 10.0.0.0/16
vSwitch5
Zone A
10.0.0.0/24
Dirección de ECS3:
10.0.0.112
vSwitch6
Zone B
10.0.1.0/24
Procedimiento
Puede completar este tutorial desde la consola de Alibaba Cloud o mediante Terraform.
Consola
Paso 1: Cree una instancia de CEN
Cree una instancia de CEN antes de conectar las instancias de red.
Inicie sesión en la consola de CEN.
En la página CEN Instance, haga clic en Create CEN Instance.
-
En el cuadro de diálogo Create CEN Instance, configure los siguientes parámetros y haga clic en OK.
Name: Introduzca un nombre para la instancia de CEN.
Description: Introduzca una descripción para la instancia de CEN.
Paso 2: Cree conexiones de VPC
En la página CEN Instance, haga clic en el ID de su instancia de CEN.
En la pestaña Basic Settings, dentro de la sección VPC, haga clic en el icono
.-
En la página Connection with Peer Network Instance, configure los siguientes parámetros y haga clic en OK.
Instance Type: De forma predeterminada, se selecciona VPC.
Region: Seleccione la región donde se despliega la instancia de red. En este ejemplo, se selecciona China (Hangzhou).
Transit Router: El sistema crea automáticamente un transit router en la región seleccionada.
Account: Seleccione el tipo de cuenta propietaria de la instancia de red. En este ejemplo, se utiliza el valor predeterminado Your Account.
Método de facturación: El valor predeterminado es pay-as-you-go.
Connection Name: Introduzca un nombre para la conexión.
Networks: Seleccione el ID de la VPC que desea conectar. En este ejemplo, se selecciona VPC3.
-
vSwitch: Seleccione instancias de vSwitch en las zonas compatibles con el transit router.
Para regiones de una sola zona, seleccione un vSwitch. Para regiones multizona, seleccione como mínimo dos vSwitch en zonas distintas. Con el fin de reducir la latencia, seleccione un vSwitch por zona.
-
Advanced Settings: En este ejemplo, para VPC3, habilite únicamente Associate with Default Route Table of Transit Router y Propagate system routes to transit router route table.
De forma predeterminada, hay tres opciones habilitadas: Associate with default route table of transit router (asocia la conexión de VPC con la tabla de rutas predeterminada del transit router), Propagate system routes to default route table of transit router (anuncia las rutas del sistema de la VPC al transit router para permitir la comunicación con otras instancias de red conectadas) y Automatically create route that points to transit router and add to all route tables of current VPC (agrega tres rutas —10.0.0.0/8, 172.16.0.0/12 y 192.168.0.0/16— a todas las tablas de rutas de la VPC, con tránsitos siguientes que apuntan al transit router; de forma predeterminada, los transit router no anuncian rutas a las VPC). Para personalizar el enrutamiento, desactive estas casillas de verificación y configure manualmente las asociaciones y la propagación de rutas. Consulte Manage routes.
NotaPara el tráfico IPv6, después de crear la conexión de VPC, habilite route synchronization o manually add IPv6 route entries que apunte a la conexión de VPC dentro de dicha VPC.
-
Una vez creada la conexión para VPC3, haga clic en Create More Connections.
Después de crear las conexiones de VPC, haga clic en Return to the List para volver a la página de detalles de la instancia.
Paso 3: Asocie las VPC con una tabla de rutas personalizada
En la página de detalles de la instancia, busque el transit router que creó y haga clic en su ID.
En la página de detalles del transit router, haga clic en la pestaña Route Table.
En el panel izquierdo de la pestaña, haga clic en Create Route Table.
-
En el cuadro de diálogo Create Route Table, configure los siguientes parámetros y haga clic en OK.
Transit Router: El sistema selecciona automáticamente el transit router de la región actual.
Name: Introduzca un nombre para la tabla de rutas.
Description: Introduzca una descripción para la tabla de rutas.
Multi-region ECMP Routing: Mantenga el valor predeterminado.
Haga clic en View Route Table Details para volver a la pestaña Route Table.
En la pestaña Route Table, seleccione la tabla de rutas personalizada que acaba de crear, haga clic en la pestaña Route Table Association y luego haga clic en Create Association.
-
En el cuadro de diálogo Add Association, seleccione las conexiones de instancia de red que desea asociar con esta tabla de rutas personalizada y haga clic en OK.
Tras la asociación, VPC1 y VPC2 reenvían el tráfico mediante la consulta de esta tabla de rutas.
En la página de detalles de la tabla de rutas personalizada, haga clic en la pestaña Route Entry y luego haga clic en Add Route Entry.
-
En el cuadro de diálogo Add Route Entry, configure los siguientes parámetros y haga clic en OK.
Route Table: El sistema selecciona automáticamente la tabla de rutas personalizada actual.
Transit Router ID: El sistema selecciona automáticamente el transit router de la región actual.
Name: Introduzca un nombre para la entrada de ruta.
Destination CIDR: Introduzca el bloque CIDR de destino de la ruta. En este ejemplo, introduzca 10.0.0.0/16.
Blackhole Route: Si selecciona esta opción, se descarta todo el tráfico destinado a esta ruta. En este ejemplo, seleccione No.
Next Hop: Seleccione el tránsito siguiente de la ruta. En este ejemplo, seleccione la conexión de VPC3.
Description: Introduzca una descripción para la entrada de ruta.
Paso 4: Agregue una ruta predeterminada a cada VPC
En la consola de VPC, agregue una ruta con destino 0.0.0.0/0 a las tablas de rutas de VPC1, VPC2 y VPC3. Establezca el tránsito siguiente de la ruta hacia el transit router.
Inicie sesión en la consola de VPC.
En el panel de navegación izquierdo, haga clic en Route Table.
En la barra de navegación superior, seleccione la región donde reside la tabla de rutas.
-
En la página Route Table, busque la tabla de rutas de destino y haga clic en su ID.
En este ejemplo, seleccione la tabla de rutas de VPC3.
En la página de detalles de la tabla de rutas, dentro de la pestaña Route Entry List, haga clic en Custom Route y luego haga clic en Add Route Entry.
-
En el panel Add Route Entry, configure los siguientes parámetros y haga clic en OK.
Name: Introduzca un nombre para la entrada de ruta.
Destination CIDR Block: Introduzca el bloque CIDR de destino. En este ejemplo, introduzca 0.0.0.0/0.
Next Hop Type: Seleccione el tipo de tránsito siguiente. En este ejemplo, seleccione Transit Router.
Transit Router: Seleccione la conexión de instancia de red. En este ejemplo, seleccione la conexión de VPC3.
Para obtener más información sobre los parámetros, consulte Manage network traffic by using a custom route table.
-
Repita step4 para step6 y agregar una ruta con destino 0.0.0.0 y tránsito siguiente hacia el transit router en VPC1 y VPC2.
Puede consultar la información de enrutamiento de VPC1, VPC2, VPC3 y de las tablas de rutas del transit router en la página de detalles del transit router, dentro de la consola de CEN.
-
En la página de detalles del transit router, haga clic en Network Instance Route Table para consultar las rutas de VPC1, VPC2 y VPC3.
En la página de detalles del transit router, haga clic en Network Instance Route Table.
-
En la lista desplegable Networks, seleccione el ID de VPC1, VPC2 o VPC3 para consultar sus rutas.
Figura 1. Rutas de VPC1
Información de rutas de VPC1: En la pestaña Route Information de la instancia del transit router, seleccione la instancia de red de VPC correspondiente. Las entradas de ruta incluyen:
Bloque CIDR de destino
0.0.0.0/0: ruta personalizada, no anunciada. El tránsito siguiente es la conexión del transit router.Bloque CIDR de destino
100.64.0.0/10: ruta del sistema, no anunciada.Bloque CIDR de destino
192.168.0.0/24: ruta del sistema, anunciada.Bloque CIDR de destino
192.168.1.0/24: ruta del sistema, anunciada.
Figura 2. Rutas de VPC2
La información de rutas de VPC2 contiene las siguientes cuatro entradas de ruta:
Bloque CIDR de destino
0.0.0.0/0: ruta personalizada, no anunciada. El tránsito siguiente es la instancia de conexión entre regiones.Bloque CIDR de destino
100.64.0.0/10: ruta del sistema, no anunciada.Bloque CIDR de destino
172.16.0.0/24: ruta del sistema, anunciada.Bloque CIDR de destino
172.16.1.0/24: ruta del sistema, anunciada.
Figura 3. Rutas de VPC3
En la página de detalles del transit router, haga clic en la pestaña Route Information, seleccione la instancia de red de VPC y la tabla de rutas correspondiente, y consulte las entradas de ruta:
0.0.0.0/0: ruta personalizada, no anunciada. El tránsito siguiente es la conexión del transit router (tr-attach).10.0.0.0/24: ruta del sistema, anunciada.10.0.1.0/24: ruta del sistema, anunciada.100.64.0.0/10: ruta del sistema, no anunciada.
-
En la pestaña Route Table, puede consultar las rutas que la tabla de rutas del sistema del transit router aprendió de VPC1, VPC2 y VPC3.
En la página de detalles del transit router, haga clic en Route Table.
-
En la pestaña Route Table, consulte las entradas de la tabla de rutas.
Figura 4. Tabla de rutas del sistema
Detalles de las entradas de la tabla de rutas del sistema (tipo: System): todas las entradas son de tipo de aprendizaje automático e incluyen los siguientes bloques CIDR de destino e instancias de conexión de tránsito siguiente:
10.0.0.0/24y10.0.1.0/24: el tránsito siguiente es attach3 (correspondiente a vpc3).172.16.0.0/24y172.16.1.0/24: el tránsito siguiente es attach2 (correspondiente a vpc2).192.168.0.0/24y192.168.1.0/24: el tránsito siguiente es attach1 (correspondiente a vpc1).
Figura 5. Tabla de rutas personalizada
La página de detalles de la tabla de rutas personalizada del transit router muestra que el tipo de tabla de rutas es Custom y que el estado es Available. La lista de entradas de ruta contiene una ruta estática: el bloque CIDR de destino es
10.0.0.0/16y el tránsito siguiente apunta a la conexión de instancia de red de VPC3.
-
Paso 5: Compruebe la conectividad de la red
Compruebe la conectividad entre VPC1, VPC2 y VPC3.
Antes de empezar, compruebe que las reglas del security group de las instancias ECS en VPC1, VPC2 y VPC3 permiten la comunicación entre dichas instancias. Para obtener más información, consulte View security group rules.
Inicie sesión en la instancia ECS de VPC1. Para obtener más información, consulte Connection methods for ECS instances.
-
Ejecute el comando ping para hacer ping a la dirección IP de la instancia ECS en VPC3 y comprobar la conectividad entre VPC1 y VPC3.
El resultado confirma que VPC1 y VPC3 pueden comunicarse.
[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 ~]# -
Inicie sesión en la instancia ECS de VPC2 y utilice el comando ping para hacer ping a la dirección IP de la instancia ECS en VPC3, con el fin de comprobar la conectividad entre VPC2 y VPC3.
El resultado confirma que VPC2 y VPC3 pueden comunicarse.
[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 ~]# -
Inicie sesión en la instancia ECS de VPC1 y utilice el comando ping para hacer ping a la dirección IP de la instancia ECS en VPC2, con el fin de comprobar la conectividad entre VPC1 y VPC2.
El resultado confirma que VPC1 y VPC2 no pueden comunicarse.
[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 ~]#
Aislamiento de rutas de VPC entre cuentas
El mecanismo de enrutamiento y aislamiento descrito en este tutorial aplica de manera idéntica a los despliegues entre cuentas. El aislamiento se logra igualmente al habilitar solo el aprendizaje de rutas (Propagate system routes to transit router route table) para VPC1 y VPC2, asociarlas con una tabla de rutas personalizada y agregar una ruta personalizada hacia VPC3 en dicha tabla. Este mecanismo no depende de la cuenta de Alibaba Cloud a la que pertenezcan las VPC.
Requisito previo: Antes de crear una conexión de VPC entre cuentas, la cuenta propietaria de la VPC debe otorgar autorización a la cuenta propietaria del transit router. Para consultar las instrucciones, vea Cross-account authorization for network instances.
Diferencia de configuración: En el Paso 2: Cree conexiones de VPC, para el campo Account, seleccione Different Account en lugar de Your Account e introduzca el ID de cuenta principal de la cuenta de Alibaba Cloud propietaria de la VPC. Todos los demás elementos de configuración son iguales que en el escenario de una sola cuenta. Para conocer los detalles de los parámetros, consulte Create a VPC connection.
Responsabilidad de las operaciones: Del Paso 1 al Paso 3 (crear la instancia de CEN, el transit router, las conexiones de VPC y la tabla de rutas personalizada con sus entradas) se ejecutan en la cuenta propietaria del transit router. El Paso 4: Agregue una ruta predeterminada a cada VPC debe ejecutarlo la cuenta propietaria de cada VPC, desde la consola de VPC de dicha cuenta.
Aislamiento de VPC entre cuentas mediante mapas de rutas
Cuando una VPC entre cuentas se conecta a CEN, de forma predeterminada queda totalmente conectada a todas las demás instancias de VPC del transit router. Para aislar de manera selectiva una VPC entre cuentas respecto a instancias de VPC específicas, configure un mapa de rutas en la tabla de rutas del transit router en lugar de usar el método de tabla de rutas personalizada y asociación descrito anteriormente en este tema. Este mecanismo es independiente del aislamiento basado en tablas de rutas personalizadas que se explica en Aislamiento de rutas de VPC entre cuentas: logra el aislamiento al filtrar los anuncios de rutas en el plano de control, sin modificar la tabla de rutas que utiliza la conexión de la VPC.
Cómo funciona: Un mapa de rutas controla qué rutas anuncia el transit router a una conexión de VPC determinada. Cuando crea un mapa de rutas de tipo Deny que coincide con el tráfico entre dos conexiones de VPC, el transit router deja de anunciar las rutas correspondientes. Por lo tanto, las dos instancias de VPC ya no pueden comunicarse entre sí, aunque las tablas de rutas subyacentes no se modifiquen.
Antes de empezar: Un mapa de rutas entra en vigor únicamente para los anuncios de rutas que ocurren después de su creación. Si ya existe en la tabla de rutas una entrada que permite la comunicación entre las dos instancias de VPC, elimínela primero. De lo contrario, la ruta existente seguirá funcionando y el aislamiento no surtirá efecto.
Para configurar un mapa de rutas de denegación:
-
Cree un mapa de rutas en la tabla de rutas del transit router con la siguiente configuración:
Action: Deny.
Priority: 20. Un valor menor indica una prioridad más alta.
Direction: Egress from the regional gateway (el mapa de rutas filtra las rutas cuando se anuncian fuera de la región).
Source instance IDs: el ID de la conexión de VPC entre cuentas, por ejemplo,
vpc-xxx.Destination instance IDs: el ID de la conexión de VPC que desea aislar de la VPC de origen, por ejemplo,
vpc-yyy.
NotaEn algunos casos, la lista desplegable Source instance IDs de la página de creación del mapa de rutas en la consola no muestra opciones seleccionables, incluso si la conexión de VPC ya se asoció con la tabla de rutas mediante la asociación de tablas de rutas. Si esto ocurre, llame a la operación CreateCenRouteMap y pase el ID de la instancia de VPC con el formato
vpc-xxxpara crear el mapa de rutas. Una vez que el mapa de rutas entre en vigor, inicie sesión en la instancia ECS de la VPC de origen y ejecute el comando ping para comprobar la conectividad con una instancia ECS de la VPC aislada. El comando ping debería fallar (100 % de pérdida de paquetes), lo cual confirma que el aislamiento del mapa de rutas está activo.
Terraform
Puede utilizar Terraform para construir el entorno de este tutorial. Para obtener instrucciones sobre cómo instalar y configurar Terraform, consulte Install Terraform.
El procedimiento siguiente describe cómo ejecutar Terraform v1.9.8 en un host Linux. Antes de comenzar, asegúrese de haber configurado Authentication.
Algunos recursos de este tutorial generan cargos. Para evitar cobros inesperados, libere los recursos cuando ya no los necesite.
Paso 1: Crear los recursos
El código siguiente define todos los recursos de este escenario. Guárdelo como un archivo .tf dentro de un directorio nuevo.
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®ionId=${var.default_region}&instanceId=${alicloud_instance.ecs[0].id}"
}
output "ecs2_login_address" {
value = "https://ecs-workbench.alibabacloud.com/?from=EcsConsole&instanceType=ecs®ionId=${var.default_region}&instanceId=${alicloud_instance.ecs[1].id}"
}
output "ecs3_login_address" {
value = "https://ecs-workbench.alibabacloud.com/?from=EcsConsole&instanceType=ecs®ionId=${var.default_region}&instanceId=${alicloud_instance.ecs[2].id}"
}
Paso 2: Probar la conectividad de red
Siga estos pasos para probar la conectividad entre VPC1, VPC2 y VPC3.
-
Inicie sesión en la instancia ECS1 de VPC1 (nombre de la instancia:
tf-CenSharedVpc-ecs1).Localice la URL de inicio de sesión de ECS1 en las salidas de Terraform. Abra la URL en su navegador y utilice la autenticación Temporary SSH Key-based.
Outputs: ecs1_login_address = "https://ecs-workbench.alibabacloud.com/?from=EcsConsole&instanceType=ecs®ionId=cn-hangzhou&instanceId=i-bp1g4zxxx" ecs2_login_address = "https://ecs-workbench.alibabacloud.com/?from=EcsConsole&instanceType=ecs®ionId=cn-hangzhou&instanceId=i-bp1ct8xxx" ecs3_login_address = "https://ecs-workbench.alibabacloud.com/?from=EcsConsole&instanceType=ecs®ionId=cn-hangzhou&instanceId=i-bp1iiwxxx" -
Ejecute el comando ping y haga ping a la dirección IP de la instancia ECS3 en VPC3 para comprobar la conectividad entre VPC1 y VPC3.
ping 10.0.0.112La salida confirma que VPC1 y VPC3 pueden comunicarse.
[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 ~]# -
Inicie sesión en la instancia ECS2 (
tf-CenSharedVpc-ecs2) de VPC2 y ejecute el comando ping para hacer ping a la dirección IP de la instancia ECS3 en VPC3 y probar la conectividad entre VPC2 y VPC3.ping 10.0.0.112La salida confirma que VPC2 y VPC3 pueden comunicarse.
[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 ~]# -
Inicie sesión en la instancia ECS1 (
tf-CenSharedVpc-ecs1) de VPC1. Utilice el comando ping para hacer ping a la dirección IP de la instancia ECS2 en VPC2 y probar la conectividad entre VPC1 y VPC2.ping 172.16.0.222La salida confirma que VPC1 y VPC2 no pueden comunicarse.
[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 ~]#
Paso 3: Limpiar los recursos
Una vez completada la verificación, ejecute el siguiente comando para liberar los recursos.
terraform destroy --auto-approve