我在专用VPC上有一个AWS MSK kafka集群。我已经设置了一个要连接到该群集的堡垒,并且可以使用kafka控制台命令并使用JVM密钥库进行SSL身份验证来成功生成和使用该堡垒的消息。
我试图通过SSH隧道从我的mac->堡垒-> kafka代理生成/使用消息,但是我似乎无法正常工作。
这是我的SSH隧道命令:
ssh -i ~/bastion.pem -N ec2-user@ec2-myhost.compute.amazonaws.com -L 9094:kafkacluster.amazonaws.com:9094 -v
,然后在我的Mac上本地运行kafka-console-producer --broker-list localhost:9094 --producer.config client.properties --topic mytopic
,但遇到org.apache.kafka.common.errors.TimeoutException: Topic AWSKafkaTutorialTopic not present in metadata after 60000 ms
错误。
当我使用未启用TLS的zookeeper服务器时,没有出现此错误。
所以我的问题是:当启用了SSL的kafka客户端连接到localhost:9094时,如何使SSH隧道正常工作?
谢谢
答案 0 :(得分:0)
可能 是因为当您位于vpc中时,您正在使用AWS dns,并且kafka可能会将一些奇特的重定向重定向到kafak集群的其他部分,因此kafkacluster.amazonaws.com可能会转到b1-kafka-blah.amazonaws.com等。
# On Mac - aws internal dns name means nothing
#
localhost:9094 ---over-ssh---> kafka
(kafka says, hey go to blah.amazon.com)
blah.amzon.com (dns has no idea, fails with errors)
但是,这在您的vpc中效果很好,因为您位于aws dns命名空间中。
在Mac上时,您不在该名称空间中,并且dns没有任何意义。
您可以做的一个偷偷摸摸的事情是编辑/ etc / hosts并将这些未知名称的dns指向您的本地主机。 (对于其他端口上的服务,您需要更多的隧道)
# /etc/hosts
127.0.0.1 localhost blah.amazon.com blah-01.amazon.com
这将欺骗您的Mac穿越隧道,而不是尝试使用dns查找。
显然,这有点顽皮。只需使用它进行测试,然后记住就可以将您的主机文件恢复为正常。
也可能是您完全有不同的问题。祝你好运。