GKE私有集群跨集群访问Strimzi Kafka的私有方案问询
适配方案
以下3种方案均满足Kafka不公网暴露、访问地址稳定的要求,可根据你的集群实际情况选择:
方案1:Internal LoadBalancer(ILB)暴露 + 跨集群DNS解析
这是最适配Strimzi生态的方案,全程内网访问无公网暴露风险:
- 首先确认两个GKE集群所在VPC已经打通(同VPC或已配置VPC对等),防火墙规则放通两个集群网段的Kafka访问端口
- 修改Strimzi Kafka自定义资源,添加
internalLoadBalancer类型的监听器,配置示例:
spec: kafka: listeners: - name: internal port: 9093 type: internalLoadBalancer tls: true # 可配置GCP ILB的所属子网、安全标签等属性 configuration: loadBalancerAnnotations: networking.gke.io/load-balancer-type: "Internal"
- 配置跨集群DNS解析:在微服务集群的CoreDNS中添加存根域,将Kafka集群的服务域名解析指向Kafka集群的CoreDNS服务IP,微服务直接使用Strimzi自动生成的Kafka服务域名连接即可,完全不需要感知底层节点或负载均衡的IP变动
方案2:通过GCP Private Service Connect(PSC)共享服务
适合需要严格隔离两个集群网络权限的场景:
- 在Kafka集群侧将Strimzi Kafka服务发布为PSC私有服务,仅允许微服务所在的项目/网段消费
- 在微服务集群侧创建对应PSC的内网访问端点,端点会分配固定内网IP
- 微服务直接使用该固定IP或绑定的内网域名访问Kafka即可,Kafka集群节点更新、IP变动完全不会影响访问配置
方案3:NodePort场景下的固定内网转发规则
如果你暂时不想修改Kafka侧的NodePort配置,可通过GCP底层网络配置解决IP变动问题:
- 给Kafka集群的所有节点绑定固定节点标签,配置GCP内网目标池自动加入所有带该标签的节点
- 创建内网转发规则,绑定固定内网IP,指向上述目标池
- 微服务使用该固定转发IP+NodePort端口访问Kafka,GKE节点更新时会自动将新节点加入目标池,无需修改应用配置
注意事项
- 所有方案的防火墙规则都需要严格限制访问源为微服务集群的网段,避免非授权内网访问
- 调整Strimzi监听器配置后,需确认
advertised.listeners参数的值为对外暴露的稳定IP/域名,避免客户端连接报错 - 若Kafka开启了身份认证,需同步完成跨集群的认证配置适配
内容的提问来源于stack exchange,提问作者Nishchal Dinesh
相关产品推荐
相关产品推荐

