背景
在实际生产环境中,有时会出现 Amazon MSK 服务集群和 Kafka 客户端应用不在同一个组织内部,基于安全考虑二者不能直接建立 Amazon VPC 对等连接,需要使用私有网络进行互联的情况。
例如:分析服务提供商需要从客户侧的 Amazon MSK 集群中抽取数据或者让客户将数据注入到自己的 Amazon MSK 集群中,通常的解决方案是使用 Amazon PrivateLink 或者 Amazon MSK Managed VPC Connection 将两个环境进行打通,但如果两个环境分布在不同的 Region 地区里,那么这两种私有连接方式都无法满足客户的需求。
本方案结合 MSK Managed VPC Connection 和 VPC Peering 为用户提供跨 Region 的私有连接方式,既满足网络安全隔离的要求,也能实现跨 Region 的 Amazon MSK 访问。
架构
架构图
架构描述
假设 Account A 中的 Amazon MSK 集群部署在 Oregon Region 中,而 Account B 的 Kafka Client 应用部署在 Virginia Region 中。由于托管的 MSK Connection 不能跨 Region 建连,所以该方案中我们会在 Oregon 为 Account B 部署 Proxy VPC。
在 Proxy VPC 中向 Account A 的 MSK Cluster 发起 MSK Connection 申请,Kafka Client 所在Amazon VPC 也要与 Proxy VPC 建立 Peering Connection。
在 Account B 中创建 Route53 Private Host Zone 关联到 Kafka Client 所在 Amazon VPC,并将 MSK Broker Domain 映射到 Proxy VPC 的 MSK Connection ENI 上,使得 Kafka Client 可以在本地 Amazon VPC 能够解析 MSK Broker Domain。
部署
前提条件
Account A 中的 MSK Cluster 已经部署完成(Managed MSK Connection 要求 Kafka 版本必须大于 2.7.1,且集群必须开启 Amazon IAM 认证方式)
部署步骤
1.在 Account B 中的 Oregon Region 创建基础 VPC 作为 Proxy VPC。在 Virginia Region 发起 Kafka Client 所在 Amazon VPC 与 Proxy VPC 的 Peering Connection 请求。
2.在 Account A 的 Amazon MSK 集群中开启 Muti-VPC Connectivity 功能,并配置 Cluster Policy,允许 Account B 连接此 MSK Cluster。
Cluster Policy:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::Account-B:root"
},
"Action": [
"kafka:CreateVpcConnection",
"kafka:GetBootstrapBrokers",
"kafka:DescribeCluster",
"kafka:DescribeClusterV2"
],
"Resource": "arn:aws:kafka:us-west-2:Account-A:cluster/BHPoc/4f2146b2-6c76-4069-99db-7d053f48d08a-14"
}
]
}
左右滑动查看完整示意
3.在 Account B 的 Oregon Region 的 Amazon MSK 服务中创建 Managed VPC Connection 连接到 Account A 中的 Amazon MSK 集群,并关联 Proxy VPC。
创建完成后会在 Account B 的 Oregon Region 自动生成一个 VPC Endpoint。
4.在 Account B 为 Domain name kafka.us-west-2.amazonaws.com 创建一个 Route53 Private Host Zone,关联 Kafka Client 所在的 Amazon VPC。
5在这个 Private Host Zone 中创建 records,将 MSK Broker 的泛域名(*.iam.bhpoc.38qbl5.c14.kafka.us-west-2.amazonaws.com)与 VPC Endpoint 进行绑定。这样做的好处是每个 MSK Broker 域名都可以解析多个 ENI 地址,如果一个 ENI 故障,不会影响某一个 Broker 访问。
验证测试
验证网络连通性
dig +short b-1.iam.bhpoc.38qbl5.c14.kafka.us-west-2.amazonaws.com
dig +short b-2.iam.bhpoc.38qbl5.c14.kafka.us-west-2.amazonaws.com
dig +short b-3.iam.bhpoc.38qbl5.c14.kafka.us-west-2.amazonaws.com
左右滑动查看完整示意
输出结果
2. 验证 Amazon MSK 客户端创建 Topic
./kafka-topics.sh --create --bootstrap-server b-2.iam.bhpoc.38qbl5.c14.kafka.us-west-2.amazonaws.com:14002,b-1.iam.bhpoc.38qbl5.c14.kafka.us-west-2.amazonaws.com:14001,b-3.iam.bhpoc.38qbl5.c14.kafka.us-west-2.amazonaws.com:14003 --command-config ./client.properties --replication-factor 2 --partitions 1 --topic topic10
左右滑动查看完整示意
输出结果
总结
与 Amazon PrivateLink 相比,MSK Managed VPC Connection 提供了托管的私有访问方式,让用户不用自建 VPC Endpoint 和 NLB,简化了网络互连难度,但两者都不能支持跨 Region 的访问。
虽然 VPC Peering 可以提供简单跨 Region 的私有网络连接,但两个 Amazon VPC 环境完全打通会增加网络安全隔离难度,而且如果是跨组织的访问很难保证两个 Amazon VPC 网络不重叠的情况发生。
本篇作者
刘欣然
亚马逊云科技解决方案架构师,目前负责互联网媒体行业云端应用的架构设计与技术咨询,专注于 Devops 与边缘计算领域。
薛佳庆
亚马逊云科技解决方案架构师,负责为互联网出海客户提供云上服务的解决方案,在无服务器,容器技术,数据分析等方面有丰富的经验。
韩宇光
亚马逊云科技解决方案架构师,熟悉互联网业务的大数据业务场景,深入理解云架构设计,对云上的运维、Devops、大数据解决方案有丰富的实践经验。
星标不迷路,开发更极速!
关注后记得星标「亚马逊云开发者」
听说,点完下面4个按钮
就不会碰到bug了!
点击阅读原文查看博客!获得更详细内容!