AWS PrivateLink
用于将VPC内的资源与其他服务(其他VPC、或AWS托管服务)以内网形式打通,并且不需要借助IGW、NAT、DX/VPN
等连接方式。
有许多公司的服务都部署在AWS上面来提供服务,例如DataDog
。用户在使用DataDog
时,将数据/指标
通过公网上传到DataDog的服务,然后在后台查看报表。
如果用户的服务器和DataDog
在同一个region,这种方式有缺陷:
如果双方能直接通过内网访问,那么上面的两个缺陷就可以解决。
很容易想到使用VPC peering
,但这样一来DataDog
需要:
VPC peering
。需要建立大量的peering,维护起来非常复杂。上面的问题可以借助AWS提供的endpoint service
来解决:
endpoint service
,并使用NLB来暴露(图右侧)Endpoint service
的ARN进行连接,中间走AWS PrivateLink
,从而可以通过endpoint service
访问对方的服务(图左侧)用户对接好endpoint service
后会在自己的VPC下自动创建一个ENI,利用这个ENI来实现访问能力。
本节我们将建立Endpoint Service
, 使用NLB将HTTP服务暴露给Consumer访问:
provider VPC
,使用internal NLB
对外提供服务consumer
,使用AWS PrivateLink
技术访问到Provider
的服务这里我们复用上一章TGW实验 时创建的VPC。
右侧的Provider VPC
网段为10.0.0.0/16
左侧的Consumer VPC
网络为10.1.0.0/16
Provider侧需要创建好Web Server、NLB
和Endpoint Service
在Provider VPC
创建一台EC2, 上面启动Web服务:
注意要把机器部署在私有子网,这样它才能挂到Internal NLB
后面:
在高级设置部分,Userdata如下,这里使用python3启动一台Web服务器:
#!/bin/bash
echo "Hello World from provider VPC" > index.html
python3 -m http.server 80 &
创建机器后如果SSH到公网机器执行curl,能够访问到页面:
在创建NLB之前,先创建一个target group:
选择TCP协议类型,并选择Provider所在的VPC:
将上面创建的EC2添加到目标里,然后点击创建。
点击创建Network Load Balancer
:
选择Internal
类型:
选择VPC及对应的私有子网:
使用上一步创建的target group:
最后点击创建
在VPC页面,点击Create Endpoint Service
:
选择使用上一步创建的NLB:
这里选择了Acceptance required
, 这样每当接受用户的请求时,都需要进行验证(类似于vpc peering
时的确认);如果把这个钩去掉,则对方只要知道了Service ARN,就能直接创建endpoint来访问它。
点击创建。创建完成后,将这个Service ARN复制出来,供下一步consumer来使用: