Transit Gateway 可以与相同或不同区域中的 Transit Gateway 建立Peering。
借助Intra-region peering
,可以在同一AWS 区域中的不同 Transit Gateway 之间路由流量,例如:
本节要额外创建三个VPC,默认每个region最多5个VPC、 5个Elastic IP、5个NAT Gateway
,可能需要预留出来,或者在Service Quotas
中提升这几个limit
在 Cloud9 中,使用 AWS CLI 命令执行 CloudFormation 代码,在首尔区域创建 PRD、STG 和 DEV VPC。
创建Seoul-VPC-PART-PRD
, Keypair做对应替换:
aws cloudformation deploy \
--stack-name "Seoul-VPC-PART-PRD" \
--template-file "Seoul-VPC-PART-PRD.yml" \
--capabilities CAPABILITY_NAMED_IAM\
--parameter-overrides "KeyPair=keypair-seoul" --region ap-northeast-2
创建Seoul-VPC-PART-STG
:
aws cloudformation deploy \
--stack-name "Seoul-VPC-PART-STG" \
--template-file "Seoul-VPC-PART-STG.yml" \
--capabilities CAPABILITY_NAMED_IAM\
--parameter-overrides "KeyPair=keypair-seoul" --region ap-northeast-2
创建Seoul-VPC-PART-DEV
:
aws cloudformation deploy \
--stack-name "Seoul-VPC-PART-DEV" \
--template-file "Seoul-VPC-PART-DEV.yml" \
--capabilities CAPABILITY_NAMED_IAM\
--parameter-overrides "KeyPair=keypair-seoul" --region ap-northeast-2
每个 VPC 的创建时间不到 3 分钟。
在 Cloud9 中执行 CloudFormation 代码以创建 PART1 和 PART2 tgw.
创建Seoul-TGW-PART1
, 这是连接到 PRD VPC 的 TGW:
aws cloudformation deploy \
--stack-name "Seoul-TGW-PART1" \
--template-file "Seoul-TGW-PART1.yml" \
--capabilities CAPABILITY_NAMED_IAM --region ap-northeast-2
创建Seoul-TGW-PART2
, 这是连接STG 和 DEV VPC的TGW:
aws cloudformation deploy \
--stack-name "Seoul-TGW-PART2" \
--template-file "Seoul-TGW-PART2.yml" \
--capabilities CAPABILITY_NAMED_IAM --region ap-northeast-2
如果配置正确,可以在 CloudFormation 中检查两个stack的状态,如下所示,每个tgw在 5 分钟内创建:
验证 CloudFormation 创建的资源是否已正确部署。
检查EC2是否创建成功:
选择AWS console - VPC - Transit Gateway
并检查 Transit Gateway 是否配置正确:
选择VPC - Transit Gateway - Transit Gateway Attachment
以检查 Transit Gateway Attachment是否配置正确:
如果选择并检查三个Attachment中的每一个,可以看到它们已经连接到“Seoul-PART-PRD、STG、DEV VPC”的 TGW 子网 ID。此外,还可以检查与路由表关联的状态。
选择VPC - Transit Gateway - Transit Gateway route tables
检查路由表配置。单击Associations
、Propagations
和Routes
选项卡,检查Seoul-VPC-PART-PRD/STG/DEV
连接以及每个VPC 的CIDR 是否已正确更新:
现在,Transit Gateway intra-region peering
所需的资源已准备就绪。
通过ssm plugin,可以根据实例ID直接连接到私有实例, 使用以下命令直接配置到私有实例的连接:
aws ec2 describe-instances --filters 'Name=tag:Name,Values=Seoul-VPC-PART-PRD-Private-10.11.21.101' 'Name=instance-state-name,Values=running' --region ap-northeast-2 | jq -r '.Reservations[].Instances[].InstanceId'
export Seoul_VPC_PART_PRD_Private_10_11_21_101=$(aws ec2 describe-instances --filters 'Name=tag:Name,Values=Seoul-VPC-PART-PRD-Private-10.11.21.101' 'Name=instance-state-name,Values=running' --region ap-northeast-2| jq -r '.Reservations[].Instances[].InstanceId')
echo "export Seoul_VPC_PART_PRD_Private_10_11_21_101=${Seoul_VPC_PART_PRD_Private_10_11_21_101}"| tee -a ~/.bash_profile
aws ec2 describe-instances --filters 'Name=tag:Name,Values=Seoul-VPC-PART-STG-Private-10.12.21.101' 'Name=instance-state-name,Values=running' --region ap-northeast-2| jq -r '.Reservations[].Instances[].InstanceId'
export Seoul_VPC_PART_STG_Private_10_12_21_101=$(aws ec2 describe-instances --filters 'Name=tag:Name,Values=Seoul-VPC-PART-STG-Private-10.12.21.101' 'Name=instance-state-name,Values=running' --region ap-northeast-2| jq -r '.Reservations[].Instances[].InstanceId')
echo "export Seoul_VPC_PART_STG_Private_10_12_21_101=${Seoul_VPC_PART_STG_Private_10_12_21_101}"| tee -a ~/.bash_profile
aws ec2 describe-instances --filters 'Name=tag:Name,Values=Seoul-VPC-PART-DEV-Private-10.13.21.101' 'Name=instance-state-name,Values=running' --region ap-northeast-2 | jq -r '.Reservations[].Instances[].InstanceId'
export Seoul_VPC_PART_DEV_Private_10_13_21_101=$(aws ec2 describe-instances --filters 'Name=tag:Name,Values=Seoul-VPC-PART-DEV-Private-10.13.21.101' 'Name=instance-state-name,Values=running' --region ap-northeast-2| jq -r '.Reservations[].Instances[].InstanceId')
echo "export Seoul_VPC_PART_DEV_Private_10_13_21_101=${Seoul_VPC_PART_DEV_Private_10_13_21_101}"| tee -a ~/.bash_profile
source ~/.bash_profile
配置完成后,查看bash_profile
:
登录到三个VPC中的私网机器:
aws ssm start-session --target $Seoul_VPC_PART_PRD_Private_10_11_21_101 --region ap-northeast-2
aws ssm start-session --target $Seoul_VPC_PART_STG_Private_10_12_21_101 --region ap-northeast-2
aws ssm start-session --target $Seoul_VPC_PART_DEV_Private_10_13_21_101 --region ap-northeast-2
每台机器都执行以下命令,在host文件中注册待测试的主机:
sudo -s
echo 10.11.11.101 Seoul-VPC-PART-PRD-Public >> /etc/hosts
echo 10.11.21.101 Seoul-VPC-PART-PRD-Private >> /etc/hosts
echo 10.12.11.101 Seoul-VPC-PART-STG-Public >> /etc/hosts
echo 10.12.21.101 Seoul-VPC-PART-STG-Private >> /etc/hosts
echo 10.13.11.101 Seoul-VPC-PART-DEV-Public >> /etc/hosts
echo 10.13.21.101 Seoul-VPC-PART-DEV-Private >> /etc/hosts