如何从外部访问专用网络上的 Cloudera Kafka Broker?
How to reach Cloudera Kafka Broker on private network from outside?
我在 VPN 中有一个集群,其中包含一个具有私有 IP 的服务器。我正在尝试在外部服务器与我的私人服务器之间建立 Kafka 通信。我的方法是设置一个 IP table,其中 public IP 指向我的私有 IP。另外,我打开了端口 9092 和 9093 以使其可以从外部访问。现在我可以使用来自外部服务器的 public IP 成功连接到我的服务器。
telnet <public_ip> 9092
Connected to <public_ip>
我的kafka代理在cloudera集群下,我用Cloudera Manager创建的。配置如下:
kafka.properties:
listeners=PLAINTEXT://<private_ip>:9092,SSL://<private_ip>:9093
advertised.listeners=PLAINTEXT://<private_ip>:9092,SSL://<private_ip>:9093
advertised.host.name:
<public_ip>
使用此代理配置,使用卡夫卡代理主机的 public_ip 或 private_ip,通信在集群内完美运行。
我现在看到的是,我有一个可以与 public_ip 一起使用的工作代理和一个能够访问 public_ip 的外部服务器,它是必需的端口。但是当我尝试从外部服务器连接到代理时,出现以下错误:
NO BROKERS AVAILABLE
没有更多的错误信息。在我的外部服务器上,我有 kafka python 包,我将生产者配置为:
"bootstrap_servers": ["<publi_ip>:9092"]
关于我的 kafka 代理的现有主题。
E规格:
私人主机
cloudera: CDH 5.12.0
kafka: kafka 2.2.0-1.2.2.0
zookeeper: Zookeeper 3.4.5
外部主机
kafka Python package: kafka-python==1.4.2
问题与非常相似。但在这种情况下,他使用了一个带有 public ip 的转发端口。有没有可能用 ip tables 来做?有人设法在 cloudera 集群上做到了吗?
提前谢谢你。
该问题并非特定于 Cloudera 或 Python。而且我认为 Cloudera Manager 没有可以为您设置的设置。
advertised.listeners
必须是 publicly 可解析的地址,可用于由客户端单独访问每个代理(例如,两个代理不能具有相同的侦听器设置并从端口使用从 public 地址转发到内部地址)
您的设置与 Docker 中的 Kafka 运行 或 AWS 等云提供商非常相似,因为您通过两个网络进行交互,因此请参阅 this blog for more information
此外,除非您设置了一些其他防火墙设置来防止随机访问,否则不要在明文协议中公开代理
我在 VPN 中有一个集群,其中包含一个具有私有 IP 的服务器。我正在尝试在外部服务器与我的私人服务器之间建立 Kafka 通信。我的方法是设置一个 IP table,其中 public IP 指向我的私有 IP。另外,我打开了端口 9092 和 9093 以使其可以从外部访问。现在我可以使用来自外部服务器的 public IP 成功连接到我的服务器。
telnet <public_ip> 9092
Connected to <public_ip>
我的kafka代理在cloudera集群下,我用Cloudera Manager创建的。配置如下:
kafka.properties:
listeners=PLAINTEXT://<private_ip>:9092,SSL://<private_ip>:9093
advertised.listeners=PLAINTEXT://<private_ip>:9092,SSL://<private_ip>:9093
advertised.host.name:
<public_ip>
使用此代理配置,使用卡夫卡代理主机的 public_ip 或 private_ip,通信在集群内完美运行。
我现在看到的是,我有一个可以与 public_ip 一起使用的工作代理和一个能够访问 public_ip 的外部服务器,它是必需的端口。但是当我尝试从外部服务器连接到代理时,出现以下错误:
NO BROKERS AVAILABLE
没有更多的错误信息。在我的外部服务器上,我有 kafka python 包,我将生产者配置为:
"bootstrap_servers": ["<publi_ip>:9092"]
关于我的 kafka 代理的现有主题。
E规格:
私人主机
cloudera: CDH 5.12.0
kafka: kafka 2.2.0-1.2.2.0
zookeeper: Zookeeper 3.4.5
外部主机
kafka Python package: kafka-python==1.4.2
问题与
提前谢谢你。
该问题并非特定于 Cloudera 或 Python。而且我认为 Cloudera Manager 没有可以为您设置的设置。
advertised.listeners
必须是 publicly 可解析的地址,可用于由客户端单独访问每个代理(例如,两个代理不能具有相同的侦听器设置并从端口使用从 public 地址转发到内部地址)
您的设置与 Docker 中的 Kafka 运行 或 AWS 等云提供商非常相似,因为您通过两个网络进行交互,因此请参阅 this blog for more information
此外,除非您设置了一些其他防火墙设置来防止随机访问,否则不要在明文协议中公开代理