MSK Network Connection

1. Summary

你要跟 MSK 进行通信, 不管是调用 MSK API, 还是调用 Kafka API, 还是 Data Read / Write, 你都要满足网络连接的条件. 如果你没有网络连接的条件, 无论你有多高的 MSK 权限你都无法跟 MSK 进行通信.

谈到跟 MSK 通信, 总会有一个 Client 机器发起通信的 Request, 或者接受 MSK 的 Response. 这个 Client 可以按照所处的网络进行如下分类.

  • 位于跟 MSK 同一个 VPC 内

  • 位于跟 MSK 同一个 AWS Account / Region, 不同的 VPC

  • 位于跟 MSK 同一个 AWS Account, 不同的 Region

  • 跟 MSK 不同的 AWS Account

  • 位于 On-prem

  • 位于 SAAS 服务提供商的服务器所在网络

本文我们想讨论对于基于以上所有情况已有的 Client, 我们应该怎样配置网络使其能跟 MSK 通信. 并且延伸讨论对于未来的新的 Client, 基于我们设计的基础设施, 如何最快最简单的接入已有的网络.

2. Challenges

3. Options

本章我们介绍目前 AWS 提供了哪些选择用于组网.

4. Solutions

本章针对 aws-msk-network-connection-summary 中提到的问题, 结合 aws-msk-network-connection-options 中给出的选择, 一一给出解决方案.

4.1 位于跟 MSK 同一个 VPC 内

  • Client 处于同一个 VPC 下, Public / Private Subnet 皆可.

  • 参考 Default Security Group, 给 MSK 和 Client 相同的 Default Security Group.

4.2 位于跟 MSK 同一个 AWS Account / Region, 不同的 VPC

  • 为 MSK VPC 和 Client VPC 创建 VPC Peering, 记得更新 Route Table.

  • VPC Peering 的多个 VPC 互相之间 CIDR Block 不能重叠.

  • VPC Peering 支持位于不同的 AWS Account, 以及不同的 AWS Region.

  • Client 处于自己 VPC 下, , Public / Private Subnet 皆可.

  • 你无法给 VPC A 中的资源 Attach 一个来自于 VPC B 的 SG. 解决方法如下:

  • 根据 这篇文档 你可以给 VPC A 中的资源 attach 一个 VPC A 的 SG, 其中 rule 允许来自于 VPC B 的 SG ID 的 Traffic, 只要他们是同一个 Account, Region.

4.3 位于跟 MSK 同一个 AWS Account, 不同的 Region

  • 为 MSK VPC 和 Client VPC 创建 VPC Peering.

  • Client 处于自己 VPC 下, , Public / Private Subnet 皆可.

  • 你无法给 VPC A 中的资源 Attach 一个来自于 VPC B 的 SG. 解决方法如下:

  • 根据 这篇文档 你无法给 VPC A 中的资源 attach 一个 VPC A 的 SG, 其中 rule 允许来自于 VPC B 的 SG ID 的 Traffic, 因为你无法 Reference 位于另一个 Region 的 SG, 即使他们是同一个 Account. 但是你可以在 Reference 里定义 VPC B 的 CIDR Block.

4.4 跟 MSK 不同的 AWS Account

  • 为 MSK VPC 和 Client VPC 创建 VPC Peering.

  • Client 处于自己 VPC 下, , Public / Private Subnet 皆可.

  • 你无法给 VPC A 中的资源 Attach 一个来自于 VPC B 的 SG. 解决方法如下:

  • 根据 这篇文档 你可以给 VPC A 中的资源 attach 一个 VPC A 的 SG, 其中 rule 允许来自于另一个 Account 的 VPC B 的 SG ID 的 Traffic, 要注意你的 Reference Id 的格式要是 ${12digits_account_id}/sg-1a2b3c4d.

4.5 位于 On-prem

  • 为 On-prem 和 AWS 之间拉一条 Direct Connect 专线, 使得 On-prem 和 AWS 之间的通信不走公网, 速度跟 AWS 之间内部通信一样快.

  • 单独开一个 AWS Account 作为 Transit Account, 并创建一个 Transit Gateway (TGW). TGW 跟 On-prem 连接, 定义好路由. 所有其他的 AWS Account 的 VPC 也跟 TGW 连接. 并更新路由. 这样所有的连接到 Transit Gateway 的网络就可以互联了, 并且可以用 Route Table 随时开关网络之间的连接.

  • Update MSK 的 Security Group, 把允许的 Reference 设为用于运行 App 的 VPC 的 CIDR Block.

  • 从 On-prem 对 MSK bootstrap endpoint 发起的连接会被 TGW 所处理.

4.6 位于 SAAS 服务提供商的服务器所在网络