无法在docker容器之外访问kafka

时间:2019-12-20 03:45:51

标签: docker nginx apache-kafka ambari hdp

我在docker容器中安装了最新的HDP。

docker ps
>hortonworks/sandbox-proxy:1.0
>hortonworks/sandbox-hdp:3.0.1

Kafka经纪人正在 6667 端口运行,并且工作正常。

   >ssh hdfs@sandbox-hdp.hortonworks.com -p 2222
   > echo "send test message" | kafka-console-producer.sh --broker-list sandbox-hdp.hortonworks.com:6667 --topic hotelReservation > /dev/null
   >kafka-console-consumer.sh   --bootstrap-server sandbox-hdp.hortonworks.com:6667 --topic test --from-beginning

唯一的问题是我无权访问docker容器之外的Kafka经纪人。

有关故障排除的更多信息:

我已验证所有端口均已打开本地计算机->代理-> hdp

HDP服务器:

      hostname -I
      172.18.0.2

      netstat -vatn | grep 6667
      tcp        0      0 172.18.0.2:6667         0.0.0.0:*               LISTEN

代理服务器

  hostname -I
  172.18.0.3

  nmap 172.18.0.2 -p 6667
  6667/tcp open  irc

  netstat -vatn | grep 6667
  tcp        0      0 0.0.0.0:6667            0.0.0.0:*               LISTEN

我的本地计算机:

nmap sandbox-hdp.hortonworks.com -p 6667
    Host is up (0.000064s latency).
    rDNS record for 127.0.0.1: localhost
    PORT     STATE SERVICE
    6667/tcp open  irc

注意:6668也已打开。

包含的默认流conf(/etc/nginx/conf/stream.d / tcp-hdp.conf ):

server {
  listen 6668;
  proxy_pass sandbox-hdp:6667;
}

所以我决定创建新的配置http:/etc/nginx/conf/stream.d / tcp-hdp.conf

server {
  listen 6667;
  server_name sandbox-hdp.hortonworks.com;
  location / {
    proxy_pass http://sandbox-hdp:6667;
  }
}

注意:我读过(here),应该使用advertised.listeners访问医生以外的经纪人:

>listeners=PLAINTEXT://0.0.0.0:6667
>advertised.listeners=PLAINTEXT://172.18.0.2:6667

但是我确定对于我的情况这是不正确的。我可以在此网络中访问,问题是某些类型的仅Nginx映射

1 个答案:

答案 0 :(得分:0)

解决方案:

运行以下命令以找到 hortonworks / sandbox-proxy 容器ID。

docker ps

登录到代理服务器

docker exec -it CONTAINER_ID /bin/bash

在nginx中添加新的映射

cd /etc/nginx/conf.stream.d
vim tcp-hdp.conf

config:

server {
  listen 6667;
  proxy_pass sandbox-hdp:6667;
}

重新加载nginx映射:

/etc/init.d/nginx reload

测试:

> ./kafka-console-consumer.sh --bootstrap-server localhost:6668 --topic topicName --from-beginning
> echo "msg" | ./kafka-console-producer.sh --broker-list sandbox-hdp.hortonworks.com:6668 --topic topicName > /dev/nul

问题是缺少6667:6667映射。现在,代理可以访问6667和6668端口。