之前的文章通过AWS Endpoint service & Endpoint 实现跨VPC请求收敛描述了如何通过 AWS Endpoint service & Endpoints 实现跨VPC请求的收敛。
最近我们进行了一次多云改造,阿里云也要承担一部分业务,因此我们需要在阿里云'复制'在AWS做过的PROD-PCI请求收敛工作。
好在阿里云很多云产品的设计很大程度借鉴了AWS,因此'复制'工作不需要重新规划,只需要调整细节即可。
在 Endpoints 和 Endpoints Service 交付给到客户后,在测试过程中客户发现偶发的请求超时,我们通过从服务本地发起请求等方式排除了一些潜在的原因。在和阿里云的同学沟通后,有以下分析。
背景
1)同一region内两个VPC互通,通过PrivateLink实现
2)在Endpoint(PROD VPC)上绑定了一个安全组,该安全组入向允许特定网段的80,443;出向允许0.0.0.0/0 80,443
3)以下链路偶发超时:Client(PROD VPC) -> Endpoint(PROD VPC)-> Endpoint Service(PCI VPC) -> NLB(PCI VPC) -> Service(PCI VPC)
解释
ep安全组出向配置了 0.0.0.0 /80 443的访问控制,ep在回包的时候命中不了这规则,目标是客户端的IP和TCP高位端口,底层ep的转发设备是多台的, 偶发能通原因是,回包hash到了有session的ep设备上,不经过安全组校验,直接转发。
即:
1)ep的安全组出入向都作用在发起请求的client
2)ep有多个'物理'实例,回包如果走不同的ep底层转发设备就需要校验出向规则,导致回包被拒绝(偶发失败的原因);如果走同一ep底层转发设备,由于同一session,不校验出向规则(偶发成功的原因)
参考下图理解: