最近碰到一个对我来说挺棘手的问题的。
因为自己本来就是网络知识相对薄弱,花了好久才解决掉,所以就想着一定要好好记录下来。
大概就是有两个不同的VPC,然后现在有一个新开发的Batch,需要同时访问这两个VPC内的数据库服务器。
简单画了一个网络图:
目的就是为了实现instance A和B之间的通信。
刚开始的时候,为了不搞的那么复杂,我把instance 改为了global access available,但是不太好用。
调查了一下原因是amazon进行域名解析的时候,会把instance B的域名解析为内网地址。
# 安装telnet
# sudo yum -y install telnet
# 安装nslookup
# sudo yum -y install bind-utils
$nslookup xxx.rds.amazon.com
Non-authoritative answer:
xxx.amazonaws.com canonical name = xxx.ap-northeast-1.compute.amazonaws.com.
Name: xxx.ap-northeast-1.compute.amazonaws.com
Address: 172.31.15.180
当然,如果不写域名,直接写域名解析后的global ip address的话,是可以进行访问的。但是因为没有申请static global ip,所以可能会出现重启服务器以后ip变化的情况。还是必须考虑如何在两个VPC之间进行通信。
查阅了一下,两个VPC之间通信的话,大概有三种方式:
- VPC Peering
- Transit Gateway
- VPN
这次,采用了相对简单的VPC Peering。
大致的设置步骤如下:
- 创建VPC Peering Connection
- 修改Route Table
这篇文章(https://qiita.com/yuppi/items/fe540e4e05920294a41c)里面讲述的很清楚
需要注意的点主要有两个:
- From A → B的情况下,需要找到A和B相应的subnet,然后去修改相关的route table。
- route table的修改,不仅仅需要设定 A → B的route,还需要设定 B → Aroute。
Route table设置完毕以后,拿内网地址telnet一下,就可以确认到通信路径OK了。
参考文章:
https://aws.amazon.com/jp/premiumsupport/knowledge-center/batch-job-stuck-runnable-status/