TGW Intra-Peering - I

Transit Gateway 可以与相同或不同区域中的 Transit Gateway 建立Peering。

借助Intra-region peering,可以在同一AWS 区域中的不同 Transit Gateway 之间路由流量,例如:

img

环境准备

本节要额外创建三个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 分钟。

创建TGW

在 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 分钟内创建:

img

检查资源

验证 CloudFormation 创建的资源是否已正确部署。

检查EC2是否创建成功:

img

选择AWS console - VPC - Transit Gateway并检查 Transit Gateway 是否配置正确:

img

选择VPC - Transit Gateway - Transit Gateway Attachment以检查 Transit Gateway Attachment是否配置正确:

img

如果选择并检查三个Attachment中的每一个,可以看到它们已经连接到“Seoul-PART-PRD、STG、DEV VPC”的 TGW 子网 ID。此外,还可以检查与路由表关联的状态。

检查TGW路由表

选择VPC - Transit Gateway - Transit Gateway route tables检查路由表配置。单击AssociationsPropagationsRoutes选项卡,检查Seoul-VPC-PART-PRD/STG/DEV 连接以及每个VPC 的CIDR 是否已正确更新:

img

img

img

现在,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:

image-20231207071549943

登录到三个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

image-20231207071632917