0

我在私有 VPC 上有一个 AWS MSK kafka 集群。我已经设置了一个堡垒来连接到这个集群,并且可以使用 kafka 控制台命令和使用 JVM 密钥库进行 SSL auth 成功地生成和使用来自堡垒的消息。

我正在尝试通过 SSH 隧道从我的 mac -> bastion -> 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 服务器时,我没有收到此错误。

所以我的问题是:当 kafka 客户端连接到 localhost:9094 并启用 SSL 时,我怎样才能使这个 SSH 隧道工作?

谢谢

4

1 回答 1

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 查找。

很显然,这有点淘气。只需将其用于测试并记住在之后将您的主机文件恢复正常。

也可能是您完全有不同的问题。祝你好运。

于 2020-07-16T15:33:30.893 回答