启用TLS的私有VPC访问上的Amazon MSK集群

时间:2020-06-05 06:58:24

标签: ssl apache-kafka amazon-vpc ssh-tunnel aws-msk

我在专用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隧道正常工作?

谢谢

1 个答案:

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

显然,这有点顽皮。只需使用它进行测试,然后记住就可以将您的主机文件恢复为正常。

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