【发布时间】:2022-01-25 10:53:59
【问题描述】:
我在 vpc 中有一个 amazon msk 集群 (kafka),我可以通过同一 vpc 中的客户端(EC2 实例)访问它。 我的问题是..我可以从本地计算机上的客户端访问我的集群吗?我该如何做这个配置?我试过改vpc和子网的路由表还是不行。
【问题讨论】:
标签: amazon-web-services apache-kafka amazon-vpc aws-msk amazon-msk
我在 vpc 中有一个 amazon msk 集群 (kafka),我可以通过同一 vpc 中的客户端(EC2 实例)访问它。 我的问题是..我可以从本地计算机上的客户端访问我的集群吗?我该如何做这个配置?我试过改vpc和子网的路由表还是不行。
【问题讨论】:
标签: amazon-web-services apache-kafka amazon-vpc aws-msk amazon-msk
这是不可能的。根据MSK FAQ
是的,从 Amazon MSK 集群生成和使用数据的唯一方法是通过您的 VPC 中的客户端与 Amazon MSK 集群之间的私有连接。 Amazon MSK 不支持公共终端节点。
相反,您需要 VPN 连接到您的 VPC 或堡垒主机,以将流量从本地主机代理到 MSK。
【讨论】:
我遇到了同样的问题,我发现this article 中的答案有效。基本上,您会查找集群的 ENI,每个 zookeeper 节点应该是 5 - 3 个,每个代理应该是 2 个。它们应该带有类似于以下内容的描述:
DO NOT DELETE - Amazon MSK network interface for cluster arn:aws:kafka:....
您为他们每个人创建一个弹性 IP,这可能意味着要求支持提高您的限制,因为我认为每个区域每个账户的标准 EIP 限制是 5 或 6,您可能会在其他地方使用一些。然后从 EC2 控制台中的 ENI 界面将 EIP 与每个 MSK ENI 关联。
我的 URL 有问题,编辑我的主机文件似乎不起作用。 broker 和 zookeeper 的 URL 仍然解析为私有 IP,所以我最终直接使用了公共 IP。
编辑:好吧,事实证明我错了。您必须至少为引导服务器编辑主机文件。我以为我从我的主机文件中删除了它们并进行了测试,它可以工作,但它们可能已被缓存。因此,您需要将公共 EIP 映射到引导服务器,并且需要将正确的 IP 映射到正确的 URL,否则会出现元数据错误。但是,出于某种原因,zookeeper 似乎在没有将其公共 IP 映射到其 URL 的情况下工作 - 只需使用公共 IP。虽然没有将公共 IP 映射到引导服务器 URL,但似乎将公共 IP 转换为 URL,然后解析为其私有 IP。
【讨论】:
1. Create public end point . Make sure plain text access is disabled.Security & NACL are enabled for your source location.
2. Go to window local machine
3. set the profile in .aws/config & .aws/credential
in config-
[default]
region = ap-northeast-1
output = json
[profile <Your profile name>]
region = ap-northeast-1
output = json
in credential file - Create a user in AWS and give the required MSK permission.
Generate secret id & secret key and set in below file
[<Your profile name>]
aws_access_key_id = <AWS USER ACCESS KEY ID>
aws_secret_access_key = <AWS SECRET ACCESS KEY>
4. Now go to CMD prompt of window and set the below variable
set AWS_PROFILE=<Your profile name>
5. Create the client.properties file in config folder of kafka and put below values
ssl.truststore.location=<PATH_TO_TRUST_STORE_FILE>
security.protocol=SASL_SSL
sasl.mechanism=AWS_MSK_IAM
sasl.jaas.config=software.amazon.msk.auth.iam.IAMLoginModule required; sasl.client.callback.handler.class=software.amazon.msk.auth.iam.IAMClientCallbackHandler
5. Now get public end point of broker on port 9198. Ready to execute public end point outside of VPC.
/kafka-console-producer.sh --bootstrap-server <public broker servers on enter code here`ort 9198> --topic <Your topic name> --producer.config config/client.properties
【讨论】:
Amazon MSK 现在支持公共访问。您可以使用此功能从开放 Internet 的任何位置访问您的集群。有一些按要求的要求,例如启用加密和启用客户端代理通信。请在此处查看详细信息:https://docs.aws.amazon.com/msk/latest/developerguide/public-access.html
【讨论】: