amazon-web-services - 从 EKS 中运行的服务访问 MSK 集群
问题描述
如果我必须集成一个外部服务,我有 3 个选项可以让它从 Kubernetes 集群访问。
- 在 Kubernetes Service 对象中使用 ExternalName
- 在 Kubernetes 服务对象中使用 ExternalIP
- 设置端点对象并将端点映射到服务对象
第三个是根据 Kuberenetes 的最佳实践推荐的。如果有多个节点映射到一个服务,端点对象提供了一个选项来列出多个 IP 地址。但不幸的是,端点对象不接受主机名。
所以在我的场景中,我需要从部署在 AWS-EKS 集群中的服务访问 MKS 集群。如果我将 MKS 视为外部服务,我只有一个选项(设置端点和服务),因为我的 MKS 集群有多个节点。但不幸的是,端点架构只能访问 IP 地址。我假设 MKS 集群的 IP 地址是弹性 IP,我不应该将它们用于我的配置。
我的问题:
当我尝试在 AES-EKS 服务中部署我的应用程序时,是否需要将 MKS 视为外部服务?如果答案是肯定的,我可以使用哪些选项来解决这种情况?
如果 MKS 也部署在 EKS 之上,通过在 VPC 之间正确设置安全组以及 VPC 对等互连,我可以从部署在 EKS 上的服务访问 MSK 吗?
解决方案
您可以创建一个指向 AWS 网络负载均衡器 Kafka 代理端口 9094 的 DNS 名称的 AWS EKS ExternalName 服务,该名称指向 MSK 在 Kafka 代理端口 9094 上提供的 Kafka 代理的 DNS 名称。https ://www.reddit。 com/r/aws/comments/cge9nx/suggestions_dns_for_msk_endpoints/
因此,当在 AWS EKS Pod 中运行的 Kafka 客户端调用 AWS EKS ExternalName 服务时,它会收到一条带有 AWS 网络负载均衡器 DNS 名称的 DNS 记录,它可以使用它来解析 AWS 网络负载均衡器的 IP 地址并向端口 9094 发送请求。
您还可以将在 AWS EKS Pod 中运行的 Kafka 客户端配置为使用由 MSK 和 Kafka 代理端口 9094 提供的 Kafka 代理的逗号分隔 DNS 名称。 https://docs.spring.io/spring-cloud-stream/docs/ Brooklyn.RELEASE/reference/html/_apache_kafka_binder.html
编辑 :
我使用 ExternalName + NLB 的第一个选项是更好的方法,因为如果 MSK Kafka 代理的 AWS DNS 名称发生更改,或者如果您想将新代理添加到 MSK,或者如果您需要指向 Kafka,您不需要更改客户端配置客户端到新的 MSK 代理列表或新的 MSK 集群。
我的第二个选项更容易实现但难以管理。
从https://kubernetes.io/docs/concepts/services-networking/service/#externalname您可以看到,如果您稍后决定将您的 MSK 移动到您的 EKS 中,您只需将 ExternalName Service 更改为 ClusterIP Service。
我还建议查看https://aws.amazon.com/blogs/big-data/how-goldman-sachs-builds-cross-account-connectivity-to-their-amazon-msk-clusters-with-aws- privatelink/案例研究,他们解释了如何使用 AWS PrivateLink 从多个 AWS 账户/VPC 中使用单个 MSK 集群。如果您的 AWS EKS 与 AWS MSK 位于同一 VPC 中,则您的 MSK 集群不需要它。但它允许您跨不同的 AWS EKS 共享单个 AWS MSK 集群,从而节省为每个 AWS EKS 使用一个 AWS MSK 的成本。
推荐阅读
- swift - Swiftui 在 TextField 中输入值,然后单击按钮需要更改文本 - 不起作用
- html - 在 iPhone 上显示单选按钮时出现奇怪的线条
- javascript - Angular js,未在表中显示套接字数据(ng-repeat)
- django - Django 使用 get_or_create() 方法创建但不更新对象
- python - 结合熊猫中的两个数据框列表
- apache-spark - PySpark:替换 ArrayType(String) 中的值
- go - 如何将结构中的特定键设置为beego orm中的外键?
- css - 为什么垂直居中需要指定的身体高度而不是宽度?
- c++ - 尝试使用线程通过将计算图像的函数拆分为 2 个线程来使 mandelbrot 设置更快,但我无法让它工作
- php - 如何通过将数组与另一个数组进行比较来从数组中删除数组?