配置内外网IP访问kafka集群

举报
Summer_ 发表于 2020/10/13 10:07:48 2020/10/13
【摘要】 配置内外网不同网段IP访问Kafka集群

场景说明

kafka使用场景中,有时希望访问kafka集群时内网和外网可以通过不同的IP访问,而kafka集群只配置了内网IP的访问接口。本文对双网卡(一个网卡IP对应内网、一个网卡IP对应外网)和单网卡(对应内网IP)两种场景提供访问Kafka集群的方式。

配置方式

下面配置方式以FusionInsight HD中的使用方式说明。

场景一:双网卡

配置原理

Kafka Broker节点主机配置双网卡,一个网卡对应内网IP段,供内网访问使用,一个网卡对应外网IP段,供外网访问使用。

配置原理是:把Broker对应主机的内外网IP都加入到Kafka listener配置中,内外网使用对应的IP去访问。

image.png

配置前准备

1.       确定内外网IP的对应关系

文中以FI双平面举例,三个节点,各个节点管理IP(外网)和业务IP(内网)对应关系如下图:

image.png

业务平面IP192.168网段,目前此网段3个节点IP可访问Kafka集群,管理平面IP8.5网段,此网段3个节点IP不可以正常访问kafka集群。下文假设需要把8.5网段当成外部可访问的网段平面。

2.       安装Kafka客户端并查看配置

1Kafka客户端的安装方式见产品文档中软件安装的配置客户端部分。

2)创建具有Kafkaadmin权限的用户,具体见产品文档中添加用户和角色部分。

3)登录Kafka客户端,查看Kafka各节点的信息

切换到Kafka客户端安装目录,例如“/opt/kafkaclient”。

cd /opt/kafkaclient

执行以下命令,配置环境变量。

source bigdata_env

执行以下命令,进行用户认证。(普通模式跳过此步骤)

kinit 组件业务用户

执行以下命令,切换到Kafka客户端安装目录。

cd Kafka/kafka/bin

执行./kafka-broker-info.sh --zookeeper zk业务IP:24002/kafka,查询结果为kafka节点的brokeridkafka业务ip节点的对应关系。

image.png

4)后台查看目前集群中listener.security.protocol.maplisteners两个参数的配置

查看Kafka集群各个节点上的/opt/huawei/Bigdata/FusionInsight_Current/1_XX_Broker/etc/server.properties路径,其中1_XX_Broker修改为集群中的具体路径,查看并拷贝保存server.properties文件中的listener.security.protocol.maplisteners配置文件信息到本地。

具体配置方式       

说明listener.security.protocol.map是监听器名称和安全协议之间的映射,监听器名称与安全协议这个键值对以冒号分隔,映射条目之间以逗号分隔。listenerskafka的监听器,配置格式是:监听器名称://IP:Port,不同监听器配置间用逗号隔开。

本文环境中broker-1节点这两个参数设置如下:

listener.security.protocol.map = PLAINTEXT:PLAINTEXT,SSL:SSL,SASL_PLAINTEXT:SASL_PLAINTEXT,SASL_SSL:SASL_SSL,TRACE:SASL_PLAINTEXT

listeners = SASL_PLAINTEXT://192.168.131.10:21007,PLAINTEXT://192.168.131.10:21005,SSL://192.168.131.10:21008,SASL_SSL://192.168.131.10:21009,TRACE://192.168.131.10:21013

具体配置方式如下

1)  在原listener.security.protocol.map配置中添加新IP访问的监听器名称和访问协议,例如,使用SASL_PLAINTEXT协议,则新增映射EXTERNAL_SASL_PLAINTEXT:SASL_PLAINTEXTEXTERNAL_SASL_PLAINTEXT是自定义监听器名称,SASL_PLAINTEXT是协议名,kafka中支持的协议类型有PLAINTEXTSASL_PLAINTEXTSASL_SSLSSL四种。

2)  在各个节点的原listeners配置中添加新IP访问地址EXTERNAL_SASL_PLAINTEXT://8.5.131.10:21112EXTERNAL_SASL_PLAINTEXT必须与listener.security.protocol.map中新添加的监听器名一致,8.5.131.10为新增的访问KafkaIP21112为此IP访问的端口号。注意:各个节点上的listeners不一样,区别是IP地址不同,各个节点上对应的是本机的IP,修改时,新增的IP地址需与原IP地址是对应的。端口号必须与原配置中的端口号不同,且端口未被使用。查看端口是否使用方式:lsof -i:2111221112为查询的端口号,如果没有查到信息则此端口未被使用。

3)  修改各个节点的listener.security.protocol.map信息:

执行kafka-configs.sh --entity-type brokers --entity-name 1 --alter --bootstrap-server 192.168.131.10:21007 --add-config listener.security.protocol.map=[PLAINTEXT:PLAINTEXT,SSL:SSL,SASL_PLAINTEXT:SASL_PLAINTEXT,SASL_SSL:SASL_SSL,TRACE:SASL_PLAINTEXT ,EXTERNAL_SASL_PLAINTEXT:SASL_PLAINTEXT] --command-config ../config/consumer.properties

--entity-name对应参数1表示brokerid,是kafka-broker-info.sh中查询出的Broker_ID--bootstrap-server参数是原集群访问的地址,--command-config参数是consumer.properties的绝对或者相对路径,文件中的安全协议security.protocol参数必须与--bootstrap-server中的端口对应;listener.security.protocol.map的值是步骤1中修改后的协议,执行时必须添加“[]”,否则执行报错

执行时按./kafka-broker-info.sh --zookeeper zk业务IP:24002/kafka查询出的brokerid依次执行(本文中有三个kafka节点,因此上述命令执行三次,即命令中的

--entity-name 分别设置为 1,2,3)。

4)  修改各个节点的listeners信息:

执行kafka-configs.sh --entity-type brokers --entity-name 1 --alter --bootstrap-server 192.168.131.10:21005 --add-config listeners=[PLAINTEXT://192.168.131.10:21005,SASL_PLAINTEXT://192.168.131.10:21007,SSL://192.168.131.10:21008,SASL_SSL://192.168.131.10:21009,TRACE://192.168.131.10:21013, EXTERNAL_SASL_PLAINTEXT://8.5.131.10:21112]

--entity-name对应参数1表示brokerid--bootstrap-server参数是原集群访问的地址,--command-config参数是consumer.properties的绝对或者相对路径,文件中的安全协议参数必须与--bootstrap-server中的端口对应;listeners中的IP必须与brokerid是一一对应,具体对应关系是kafka-broker-info.shbrokeridlisteners中原配置IP以及新增IP一一对应。执行时按brokerid依次执行。

例如,本文中对应关系如下:

BrokerID

kafka访问IP

新增Kafka访问IP

1

192.168.131.10

8.5.131.10

2

192.168.131.11

8.5.131.11

3

192.168.131.12

8.5.131.12

修改时,--entity-name 1对应的listeners中的IP是原IP 192.168.131.10和新增IP 8.5.131.10

5)  配置完成后原IP可继续访问,新添加的IP按新配置的端口和协议访问,例如,EXTERNAL_SASL_PLAINTEXT对应的是SASL_PLAINTEXT协议,生产数据的命令是kafka-verifiable-producer.sh --max-messages 100 --topic mytest --broker-list 8.5.131.11:21112 --producer.config ../config/producer.properties

 

说明:配置时,这两个参数原本的配置不能删除,只能在原来的配置上增加新的配置,否则使用kafka-configs.sh命令会报错。添加新的配置后,zk/brokers/ids/目录下各节点的信息也会改变,可能造成kafka-broker-info.sh信息的展示与添加配置前不同。

例如,listeners配置时新添加的协议在原来协议后面,则不会改变zk/brokers/ids/目录下各节点的host信息,kafka-broker-info.sh仍显示原IPbrokerid的映射关系。listeners=[PLAINTEXT://192.168.131.10:21005,SASL_PLAINTEXT://192.168.131.10:21007,SSL://192.168.131.10:21008,SASL_SSL://192.168.131.10:21009,TRACE://192.168.131.10:21013 ,EXTERNAL_SASL_PLAINTEXT://8.5.131.10:21112]

image.png

image.png

listeners配置时新添加的协议在原来协议前面,则可能会改变zk/brokers/ids/目录下各节点的host信息,kafka-broker-info.sh显示新IPbrokerid的映射关系。

listeners=[ EXTERNAL_SASL_PLAINTEXT://8.5.131.10:21112,PLAINTEXT://192.168.131.10:21005,SASL_PLAINTEXT://192.168.131.10:21007,SSL://192.168.131.10:21008,SASL_SSL://192.168.131.10:21009,TRACE://192.168.131.10:21013]

image.png

 image.png

场景二:单网卡

配置原理

Kafka Broker节点主机只对应一个网卡,供内网访问使用,防火墙映射出一个可供外网访问的IPKafka每个节点内网IP和端口与映射外网相同IP的不同端口,外网访问时,使用此映射的IP和端口。

配置原理是:把Broker对应主机的内网IP和端口加入到Kafka listener配置中,Broker对应的外网IP和端口加入到kafka advertised.listener配置中,外网使用对应的IP和端口去访问,实际访问的还是内网的IP和端口。

image.png

配置前准备

1.       网络映射新的IP和端口

此方案中不同节点映射为同一IP不同端口,映射关系如下:

IP

原端口

映射IP

映射端口

192.168.131.10

21112

8.5.131.10

21027

192.168.131.11

21112

8.5.131.10

21028

192.168.131.12

21112

8.5.131.10

21029

 

192.168网段是原集群中的业务IP8.5网段是新映射的IP,外网可直接访问此网段。访问时,不同端口实际上访问的是对应的内网IP

2.       安装Kafka客户端并查看配置

1Kafka客户端的安装方式见产品文档中软件安装的配置客户端部分。

2)创建具有Kafkaadmin权限的用户,具体见产品文档中添加用户和角色部分。

3)登录Kafka客户端,查看Kafka各节点的信息

切换到Kafka客户端安装目录,例如“/opt/kafkaclient”。

cd /opt/kafkaclient

执行以下命令,配置环境变量。

source bigdata_env

执行以下命令,进行用户认证。(普通模式跳过此步骤)

kinit 组件业务用户

执行以下命令,切换到Kafka客户端安装目录。

cd Kafka/kafka/bin

执行./kafka-broker-info.sh --zookeeper zk业务IP:24002/kafka,查询结果为kafka节点的brokeridkafka业务ip节点的对应关系。

image.png

4)后台查看目前集群中listener.security.protocol.maplisteners两个参数的配置

查看Kafka集群各个节点上的/opt/huawei/Bigdata/FusionInsight_Current/1_XX_Broker/etc/server.properties路径,其中1_XX_Broker修改为集群中的具体路径,查看并拷贝保存server.properties文件中的listener.security.protocol.maplisteners配置文件信息到本地。

具体配置方式      

说明listener.security.protocol.map是监听器名称和安全协议之间的映射,监听器名称与安全协议这个键值对以冒号分隔,映射条目之间以逗号分隔。listenerskafka的监听器,配置格式是:监听器名称://IP:Port,不同监听器配置间用逗号隔开。advertised.listenerskafka对外开放的监听器,配置格式是:监听器名称://IP:Port,不同监听器配置间用逗号隔开。

本文环境中broker-1节点这两个参数设置如下:

listener.security.protocol.map = PLAINTEXT:PLAINTEXT,SSL:SSL,SASL_PLAINTEXT:SASL_PLAINTEXT,SASL_SSL:SASL_SSL,TRACE:SASL_PLAINTEXT

listeners = SASL_PLAINTEXT://192.168.131.10:21007,PLAINTEXT://192.168.131.10:21005,SSL://192.168.131.10:21008,SASL_SSL://192.168.131.10:21009,TRACE://192.168.131.10:21013

具体配置方式如下

1 在原listener.security.protocol.map配置中添加新IP访问的监听器名称和访问协议,例如,使用SASL_PLAINTEXT协议,则新增映射EXTERNAL_SASL_PLAINTEXT:SASL_PLAINTEXTEXTERNAL_SASL_PLAINTEXT是自定义监听器名称,SASL_PLAINTEXT是协议名,kafka中支持的协议类型有PLAINTEXTSASL_PLAINTEXTSASL_SSLSSL四种。

2 在各个节点的原listeners配置中添加新IP访问地址EXTERNAL_SASL_PLAINTEXT://8.5.131.10:21112EXTERNAL_SASL_PLAINTEXT必须与listener.security.protocol.map中新添加的监听器名一致,8.5.131.10为新映射的外网访问KafkaIP21112为此IP访问的端口号。注意:各个节点上的listeners不一样,区别是IP地址不同,各个节点上对应的是本机的IP,新映射的IP地址是一样的。修改时,新增的IP地址对应的端口号必须与原配置中的端口号不同,且端口未被使用。查看端口是否使用方式:lsof -i:2111221112为查询的端口号,如果没有查到信息则此端口未被使用。

3 修改各个节点的listener.security.protocol.map信息:

执行kafka-configs.sh --entity-type brokers --entity-name 1 --alter --bootstrap-server 192.168.131.10:21007 --add-config listener.security.protocol.map=[PLAINTEXT:PLAINTEXT,SSL:SSL,SASL_PLAINTEXT:SASL_PLAINTEXT,SASL_SSL:SASL_SSL,TRACE:SASL_PLAINTEXT ,EXTERNAL_SASL_PLAINTEXT:SASL_PLAINTEXT] --command-config ../config/consumer.properties

--entity-name对应参数1表示brokerid,是kafka-broker-info.sh中查询出的Broker_ID--bootstrap-server参数是原集群访问的地址,--command-config参数是consumer.properties的绝对或者相对路径,文件中的安全协议security.protocol参数必须与--bootstrap-server中的端口对应;listener.security.protocol.map的值是步骤1中修改后的协议,执行时必须添加“[]”,否则执行报错

执行时按./kafka-broker-info.sh --zookeeper zk业务IP:24002/kafka查询出的brokerid依次执行(本文中有三个kafka节点,因此上述命令执行三次,即命令中的

--entity-name 分别设置为 1,2,3)。

4 修改各个节点的listeners信息:

执行kafka-configs.sh --entity-type brokers --entity-name 1 --alter --bootstrap-server 192.168.131.10:21005 --add-config listeners=[PLAINTEXT://192.168.131.10:21005,SASL_PLAINTEXT://192.168.131.10:21007,SSL://192.168.131.10:21008,SASL_SSL://192.168.131.10:21009,TRACE://192.168.131.10:21013, EXTERNAL_SASL_PLAINTEXT:// 192.168.131.10:21112]

--entity-name对应参数1表示brokerid--bootstrap-server参数是原集群访问的地址,--command-config参数是consumer.properties的绝对或者相对路径,文件中的安全协议参数必须与--bootstrap-server中的端口对应;listeners中的IP必须与brokerid是一一对应。执行时按brokerid依次执行。注意此时EXTERNAL_SASL_PLAINTEXT对应的是内网IP和内网配置的端口。

5 修改各个节点的advertised.listeners信息:

执行kafka-configs.sh --entity-type brokers --entity-name 1 --alter --bootstrap-server 192.168.131.10:21005 --add-config advertised.listeners=[PLAINTEXT://192.168.131.10:21005,SASL_PLAINTEXT://192.168.131.10:21007,SSL://192.168.131.10:21008,SASL_SSL://192.168.131.10:21009,TRACE://192.168.131.10:21013, EXTERNAL_SASL_PLAINTEXT://8.5.131.10:21027]

--entity-name对应参数1表示brokerid--bootstrap-server参数是原集群访问的地址,--command-config参数是consumer.properties的绝对或者相对路径,文件中的安全协议参数必须与--bootstrap-server中的端口对应;advertised.listeners中的原IP必须与brokerid是一一对应,新增IP的端口必须与此节点对应的映射端口一一对应。执行时按brokerid依次执行。注意此时EXTERNAL_SASL_PLAINTEXT对应的是映射的外网IP和外网访问的端口。

6 配置完成后原IP可继续访问,新添加的IP按新配置的端口和协议访问,例如,EXTERNAL_SASL_PLAINTEXT对应的是SASL_PLAINTEXT协议,生产数据的命令是kafka-verifiable-producer.sh --max-messages 100 --topic mytest --broker-list 8.5.131.10:21027 --producer.config ../config/producer.properties

 

说明:配置时,这两个参数原本的配置不能删除,只能在原来的配置上增加新的配置,否则使用kafka-configs.sh命令会报错。

回退方式

1.       如果删除此次配置,针对各个节点在kafka客户端执行如下两条命令:

kafka-configs.sh --entity-type brokers --entity-name 1 --alter --bootstrap-server 192.168.131.10:21005 --delete-config listener.security.protocol.map --command-config ../config/consumer.properties

kafka-configs.sh --entity-type brokers --entity-name 1 --alter --bootstrap-server 192.168.131.10:21005 -- delete-config listeners --command-config ../config/consumer.properties

kafka-configs.sh --entity-type brokers --entity-name 1 --alter --bootstrap-server 192.168.131.10:21005 -- delete-config advertised.listeners --command-config ../config/consumer.properties

执行时按./kafka-broker-info.sh --zookeeper zk业务IP:24002/kafka查询出的brokerid依次执行删除。删除时各个节点配置都需要删除,各个节点命令仅--entity-name参数不一致。此删除方式仅删除listener.security.protocol.maplisteners相关的配置,对其他配置无影响,删除后这两个参数恢复为默认配置。删除后需重启Kafka集群。


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。