O Cloud Enterprise Network (CEN) oferece políticas flexíveis de conectividade, isolamento e redirecionamento de tráfego dentro de uma região. Este tutorial descreve como permitir que VPCs isoladas acessem uma VPC de serviços compartilhados, mantendo-as isoladas entre si.
Contexto
Uma empresa possui três VPCs implantadas na região China (Hangzhou). A VPC3 hospeda serviços compartilhados. O objetivo é permitir que VPC1 e VPC2 acessem a VPC3, mantendo VPC1 e VPC2 isoladas entre si.
Planejamento de rede
Utilize tabelas de rotas personalizadas do CEN, associações de tabelas de rotas e aprendizado de rotas para configurar seus segmentos de rede e roteamento da seguinte forma:
Neste exemplo, as três VPCs e o transit router pertencem à mesma conta Alibaba Cloud. Para uma implantação entre contas, consulte a seção "Isolamento de rotas de VPC entre contas".
-
Ao conectar a VPC3 ao transit router, ative as configurações avançadas Associate with Default Route Table of Transit Router e Propagate system routes to transit router route table.
A tabela de rotas do sistema do transit router passa a aprender automaticamente as rotas da VPC3, e a VPC3 encaminha o tráfego por meio dessa tabela de rotas do sistema.
-
Ao conectar VPC1 e VPC2 ao transit router, ative apenas a configuração avançada Propagate system routes to transit router route table. Em seguida, associe VPC1 e VPC2 a uma tabela de rotas personalizada no transit router e adicione uma entrada de rota personalizada que aponte para a VPC3.
A tabela de rotas do sistema do transit router aprende as rotas de VPC1 e VPC2. VPC1 e VPC2 encaminham o tráfego para a VPC3 pela tabela de rotas personalizada, o que impede a comunicação entre VPC1 e VPC2.
Adicione uma rota para 0.0.0.0/0 nas tabelas de rotas de VPC1, VPC2 e VPC3. Defina o próximo salto dessa rota como o transit router.
-
A tabela a seguir detalha o planejamento de rede das VPCs.
ImportanteAo planejar sua rede, certifique-se de que os blocos CIDR das VPCs não se sobreponham.
VPC
vSwitch
Zona do vSwitch
Bloco CIDR
ECS
VPC1
Bloco CIDR primário: 192.168.0.0/16
vSwitch1
Zone A
192.168.0.0/24
Endereço do ECS1:
192.168.0.224
vSwitch2
Zone B
192.168.1.0/24
VPC2
Bloco CIDR primário: 172.16.0.0/16
vSwitch3
Zone A
172.16.0.0/24
Endereço do ECS2:
172.16.0.222
vSwitch4
Zone B
172.16.1.0/24
VPC3
Bloco CIDR primário: 10.0.0.0/16
vSwitch5
Zone A
10.0.0.0/24
Endereço do ECS3:
10.0.0.112
vSwitch6
Zone B
10.0.1.0/24
Procedimento
Você pode concluir este tutorial utilizando o console Alibaba Cloud ou o Terraform.
Console
Etapa 1: Criar uma instância do CEN
Crie uma instância do CEN antes de conectar suas instâncias de rede.
Faça login no console do CEN.
Na página CEN Instance, clique em Create CEN Instance.
-
Na caixa de diálogo Create CEN Instance, configure os parâmetros a seguir e clique em OK.
Name: Insira um nome para a instância do CEN.
Description: Insira uma descrição para a instância do CEN.
Etapa 2: Criar conexões de VPC
Na página CEN Instance, clique em o ID da sua instância do CEN.
Na aba Basic Settings, na seção VPC, clique em o ícone
.-
Na página Connection with Peer Network Instance, configure os parâmetros a seguir e clique em OK.
Instance Type: VPC é selecionado por padrão.
Region: Selecione a região onde a instância de rede está implantada. Neste exemplo, China (Hangzhou) é selecionado.
Transit Router: O sistema cria automaticamente um transit router na região selecionada.
Account: Selecione o tipo de conta proprietária da instância de rede. Neste exemplo, o valor padrão Your Account é utilizado.
Método de faturamento: o valor padrão é pagamento conforme o uso.
Connection Name: Insira um nome para a conexão.
Networks: Selecione o ID da VPC que deseja conectar. Neste exemplo, VPC3 é selecionada.
-
vSwitch: Selecione instâncias de vSwitch em zonas compatíveis com o transit router.
Para regiões com zona única, selecione um vSwitch. Para regiões com múltiplas zonas, selecione pelo menos dois vSwitches em zonas diferentes. Para reduzir a latência, selecione um vSwitch por zona.
-
Advanced Settings: Neste exemplo, para a VPC3, ative apenas Associate with Default Route Table of Transit Router e Propagate system routes to transit router route table.
Três opções são ativadas por padrão: Associate with default route table of transit router (associa a conexão da VPC à tabela de rotas padrão do transit router), Propagate system routes to default route table of transit router (divulga as rotas de sistema da VPC para o transit router, permitindo a comunicação com outras instâncias de rede conectadas) e Automatically create route that points to transit router and add to all route tables of current VPC (adiciona três rotas — 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16 — a todas as tabelas de rotas da VPC, com próximo salto apontando para o transit router; por padrão, transit routers não divulgam rotas para VPCs). Para personalizar o roteamento, desmarque essas caixas de seleção e configure as associações e propagações de rotas manualmente. Consulte Manage routes.
NotaPara tráfego IPv6, após criar a conexão da VPC, ative route synchronization ou manually add IPv6 route entries apontando para a conexão da VPC na VPC.
-
Após a criação da conexão da VPC3, clique em Create More Connections.
Após a criação das conexões de VPC, clique em Return to the List para retornar à página de detalhes da instância.
Etapa 3: Associar VPCs a uma tabela de rotas personalizada
Na página de detalhes da instância, localize o transit router criado e clique em seu ID.
Na página de detalhes do transit router, clique em a aba Route Table.
No painel à esquerda da aba, clique em Create Route Table.
-
Na caixa de diálogo Create Route Table, configure os parâmetros a seguir e clique em OK.
Transit Router: O sistema seleciona automaticamente o transit router na região atual.
Name: Insira um nome para a tabela de rotas.
Description: Insira uma descrição para a tabela de rotas.
Multi-region ECMP Routing: Mantenha o valor padrão.
Clique em View Route Table Details para retornar à aba Route Table.
Na aba Route Table, selecione a tabela de rotas personalizada recém-criada, clique em a aba Route Table Association e, em seguida, clique em Create Association.
-
Na caixa de diálogo Add Association, selecione as conexões de instâncias de rede a serem associadas a esta tabela de rotas personalizada e clique em OK.
Após a associação, VPC1 e VPC2 encaminham o tráfego consultando esta tabela de rotas.
Na página de detalhes da tabela de rotas personalizada, clique em a aba Route Entry e, em seguida, clique em Add Route Entry.
-
Na caixa de diálogo Add Route Entry, configure os parâmetros a seguir e clique em OK.
Route Table: O sistema seleciona automaticamente a tabela de rotas personalizada atual.
Transit Router ID: O sistema seleciona automaticamente o transit router na região atual.
Name: Insira um nome para a entrada de rota.
Destination CIDR: Insira o bloco CIDR de destino da rota. Neste exemplo, insira 10.0.0.0/16.
Blackhole Route: Se você selecionar esta opção, todo o tráfego destinado a esta rota será descartado. Neste exemplo, selecione No.
Next Hop: Selecione o próximo salto da rota. Neste exemplo, selecione a conexão da VPC3.
Description: Insira uma descrição para a entrada de rota.
Etapa 4: Adicionar uma rota padrão a cada VPC
No console da VPC, adicione uma rota com destino 0.0.0.0/0 às tabelas de rotas de VPC1, VPC2 e VPC3. Defina o próximo salto da rota como o transit router.
Faça login no console da VPC.
No painel de navegação à esquerda, clique em Route Table.
Na barra de navegação superior, selecione a região onde a tabela de rotas está localizada.
-
Na página Route Table, localize a tabela de rotas desejada e clique em seu ID.
Neste exemplo, selecione a tabela de rotas da VPC3.
Na página de detalhes da tabela de rotas, na aba Route Entry List, clique em Custom Route e, em seguida, clique em Add Route Entry.
-
No painel Add Route Entry, configure os parâmetros a seguir e clique em OK.
Name: Insira um nome para a entrada de rota.
Destination CIDR Block: Insira o bloco CIDR de destino. Neste exemplo, insira 0.0.0.0/0.
Next Hop Type: Selecione o tipo do próximo salto. Neste exemplo, selecione Transit Router.
Transit Router: Selecione a conexão da instância de rede. Neste exemplo, selecione a conexão da VPC3.
Para mais informações sobre os parâmetros, consulte Manage network traffic by using a custom route table.
-
Repita step4 até step6 para adicionar uma rota com destino 0.0.0.0/0 e próximo salto apontando para o transit router nas VPC1 e VPC2.
Você pode visualizar as informações de roteamento de VPC1, VPC2, VPC3 e das tabelas de rotas do transit router na página de detalhes do transit router no console do CEN.
-
Na página de detalhes do transit router, clique em Network Instance Route Table para visualizar as rotas de VPC1, VPC2 e VPC3.
Na página de detalhes do transit router, clique em Network Instance Route Table.
-
Na lista suspensa Networks, selecione o ID de VPC1, VPC2 ou VPC3 para visualizar suas rotas.
Figura 1. Rotas da VPC1
Informações de rota da VPC1: Na aba Route Information da instância do transit router, selecione a instância de rede VPC correspondente. As entradas de rota incluem:
Bloco CIDR de destino
0.0.0.0/0: rota personalizada, não divulgada. O próximo salto é a conexão do transit router.Bloco CIDR de destino
100.64.0.0/10: rota de sistema, não divulgada.Bloco CIDR de destino
192.168.0.0/24: rota de sistema, divulgada.Bloco CIDR de destino
192.168.1.0/24: rota de sistema, divulgada.
Figura 2. Rotas da VPC2
As informações de rota da VPC2 contêm as seguintes quatro entradas de rota:
Bloco CIDR de destino
0.0.0.0/0: rota personalizada, não divulgada. O próximo salto é a instância de conexão inter-regional.Bloco CIDR de destino
100.64.0.0/10: rota de sistema, não divulgada.Bloco CIDR de destino
172.16.0.0/24: rota de sistema, divulgada.Bloco CIDR de destino
172.16.1.0/24: rota de sistema, divulgada.
Figura 3. Rotas da VPC3
Na página de detalhes do transit router, clique em a aba Route Information, selecione a instância de rede VPC e a tabela de rotas correspondente e visualize as entradas de rota:
0.0.0.0/0: rota personalizada, não divulgada. O próximo salto é a conexão do transit router (tr-attach).10.0.0.0/24: rota de sistema, divulgada.10.0.1.0/24: rota de sistema, divulgada.100.64.0.0/10: rota de sistema, não divulgada.
-
Na aba Route Table, você pode visualizar as rotas que a tabela de rotas do sistema do transit router aprendeu de VPC1, VPC2 e VPC3.
Na página de detalhes do transit router, clique em Route Table.
-
Na aba Route Table, visualize as entradas de rota na tabela de rotas.
Figura 4. Tabela de rotas do sistema
Detalhes das entradas de rota da tabela de rotas do sistema (tipo: System): todas as entradas de rota são do tipo aprendizado automático e contêm os seguintes blocos CIDR de destino e instâncias de conexão de próximo salto:
10.0.0.0/24e10.0.1.0/24: o próximo salto é attach3 (correspondente à vpc3).172.16.0.0/24e172.16.1.0/24: o próximo salto é attach2 (correspondente à vpc2).192.168.0.0/24e192.168.1.0/24: o próximo salto é attach1 (correspondente à vpc1).
Figura 5. Tabela de rotas personalizada
A página de detalhes da tabela de rotas personalizada do transit router mostra que o tipo da tabela de rotas é Custom e o status é Available. A lista de entradas de rota contém uma rota estática: o bloco CIDR de destino é
10.0.0.0/16, e o próximo salto aponta para a conexão da instância de rede da VPC3.
-
Etapa 5: Testar a conectividade de rede
Teste a conectividade entre VPC1, VPC2 e VPC3.
Antes de começar, verifique se as regras do grupo de segurança das instâncias ECS em VPC1, VPC2 e VPC3 permitem a comunicação entre as instâncias. Para mais informações, consulte View security group rules.
Faça login na instância ECS na VPC1. Para mais informações, consulte Connection methods for ECS instances.
-
Execute o comando ping para fazer ping no endereço IP da instância ECS na VPC3 e testar a conectividade entre VPC1 e VPC3.
A saída confirma que VPC1 e VPC3 conseguem se comunicar.
[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 ~]# -
Faça login na instância ECS na VPC2 e use o comando ping para fazer ping no endereço IP da instância ECS na VPC3, testando a conectividade entre VPC2 e VPC3.
A saída confirma que VPC2 e VPC3 conseguem se comunicar.
[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 ~]# -
Faça login na instância ECS na VPC1 e use o comando ping para fazer ping no endereço IP da instância ECS na VPC2, testando a conectividade entre VPC1 e VPC2.
A saída confirma que VPC1 e VPC2 não conseguem se comunicar.
[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 ~]#
Isolamento de rotas de VPC entre contas
O mecanismo de roteamento e isolamento descrito neste tutorial se aplica de forma idêntica a implantações entre contas. O isolamento continua sendo alcançado ao ativar apenas o aprendizado de rotas (Propagate system routes to transit router route table) para VPC1 e VPC2, associando-as a uma tabela de rotas personalizada e adicionando uma rota personalizada para a VPC3 nessa tabela de rotas. Esse mecanismo não depende de qual conta Alibaba Cloud é proprietária das VPCs.
Pré-requisito: Antes de criar uma conexão de VPC entre contas, a conta proprietária da VPC precisa conceder autorização à conta proprietária do transit router. Para instruções, consulte Cross-account authorization for network instances.
Diferença de configuração: Na Etapa 2: Criar conexões de VPC, para o campo Account, selecione Different Account em vez de Your Account e insira o ID da conta principal da Alibaba Cloud proprietária da VPC. Todos os demais itens de configuração permanecem iguais ao cenário de mesma conta. Para detalhes dos parâmetros, consulte Create a VPC connection.
Propriedade das operações: Da Etapa 1 até a Etapa 3 (criação da instância do CEN, do transit router, das conexões de VPC e da tabela de rotas personalizada com suas entradas de rota), todas as ações são realizadas na conta proprietária do transit router. A Etapa 4: Adicionar uma rota padrão a cada VPC deve ser executada pela conta proprietária de cada VPC, no console de VPC dessa conta.
Isolamento de VPC entre contas usando mapas de rotas
Após uma VPC de outra conta ser conectada ao CEN, ela possui conectividade total com todas as demais instâncias de VPC no transit router por padrão. Para isolar seletivamente uma VPC de outra conta de instâncias de VPC específicas, configure um mapa de rotas na tabela de rotas do transit router em vez de usar o método de tabela de rotas personalizada e associação descrito anteriormente neste tópico. Esse mecanismo é independente do isolamento baseado em tabela de rotas personalizada descrito em Isolamento de rotas de VPC entre contas: ele alcança o isolamento filtrando as divulgações de rotas no plano de controle, sem alterar a tabela de rotas à qual a conexão da VPC está associada.
Como funciona: Um mapa de rotas controla quais rotas o transit router divulga para uma determinada conexão de VPC. Ao criar um mapa de rotas Deny que corresponda ao tráfego entre duas conexões de VPC, o transit router para de divulgar as rotas correspondentes. Assim, as duas instâncias de VPC não conseguem mais se comunicar, mesmo que as tabelas de rotas subjacentes não sejam modificadas.
Antes de começar: Um mapa de rotas produz efeito apenas para divulgações de rotas que ocorrerem após sua criação. Se já existir uma entrada de rota que permita a comunicação entre as duas instâncias de VPC na tabela de rotas, exclua essa entrada primeiro. Caso contrário, a rota existente continuará funcionando e o isolamento não entrará em vigor.
Para configurar um mapa de rotas de negação:
-
Crie um mapa de rotas na tabela de rotas do transit router com as seguintes configurações:
Action: Deny.
Priority: 20. Um valor menor indica maior prioridade.
Direction: Egress from the regional gateway (o mapa de rotas filtra as rotas conforme são divulgadas para fora da região).
Source instance IDs: o ID da conexão da VPC de outra conta, por exemplo,
vpc-xxx.Destination instance IDs: o ID da conexão da VPC que você deseja isolar da VPC de origem, por exemplo,
vpc-yyy.
NotaEm alguns casos, a lista suspensa Source instance IDs na página de criação do mapa de rotas no console não exibe opções selecionáveis, mesmo que a conexão da VPC já tenha sido associada à tabela de rotas por meio da associação de tabela de rotas. Se isso ocorrer, chame a operação CreateCenRouteMap via API e passe o ID da instância VPC no formato
vpc-xxxpara criar o mapa de rotas. Após o mapa de rotas entrar em vigor, faça login na instância ECS na VPC de origem e execute o comando ping para testar a conectividade com uma instância ECS na VPC isolada. O comando ping deve falhar (100% de perda de pacotes), confirmando que o isolamento por mapa de rotas está em vigor.
Terraform
Você pode usar Terraform para preparar o ambiente deste tutorial. Para instruções de instalação e configuração do Terraform, consulte Instalar o Terraform.
O procedimento a seguir descreve como executar o Terraform v1.9.8 em um host Linux. Antes de começar, certifique-se de que você configurou Autenticação.
Alguns recursos deste tutorial geram custos. Para evitar cobranças inesperadas, libere os recursos quando não forem mais necessários.
Etapa 1: Criar recursos
O código a seguir define todos os recursos deste cenário. Salve-o como um arquivo .tf em um novo diretório.
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}"
}
Etapa 2: Testar a conectividade de rede
Siga as etapas abaixo para testar a conectividade entre VPC1, VPC2 e VPC3.
-
Faça login na instância ECS1 na VPC1 (nome da instância:
tf-CenSharedVpc-ecs1).Localize a URL de login do ECS1 nas saídas do Terraform. Abra a URL no navegador e utilize a autenticação 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" -
Execute o comando ping e faça ping no endereço IP da instância ECS3 na VPC3 para testar a conectividade entre VPC1 e VPC3.
ping 10.0.0.112A saída confirma que VPC1 e VPC3 conseguem se comunicar.
[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 ~]# -
Faça login na instância ECS2 (
tf-CenSharedVpc-ecs2) na VPC2 e execute o comando ping para fazer ping no endereço IP da instância ECS3 na VPC3 e testar a conectividade entre VPC2 e VPC3.ping 10.0.0.112A saída confirma que VPC2 e VPC3 conseguem se comunicar.
[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 ~]# -
Faça login na instância ECS1 (
tf-CenSharedVpc-ecs1) na VPC1. Utilize o comando ping para fazer ping no endereço IP da instância ECS2 na VPC2 e testar a conectividade entre VPC1 e VPC2.ping 172.16.0.222A saída confirma que VPC1 e VPC2 não conseguem se comunicar.
[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 ~]#
Etapa 3: Limpar os recursos
Após a verificação, execute o comando a seguir para liberar os recursos.
terraform destroy --auto-approve