原来是我昆啊

0 声望

这家伙太懒,什么都没留下

个人动态
  • 半兽人 赞了 在 外网连接内网kafka-kerberos 报错验证失败! 的评论!

    感谢大佬的指点,目前已经全部调通,包括kerberos环境!

    非kerberos环境最后配置的格式就是上面贴的。
    kerberos环境 大致还需要以下几点。

    1、kafka-server端加了环境变量

    export KAFKA_OPTS="-Djava.security.auth.login.config=/usr/hdp/current/kafka-broker/conf/kafka_jaas.conf"
    

    2、/etc/krb5.conf文件可能需要加一行udp_preference_limit = 1 将udp改成tcp防止丢包(这个不一定需要)

    3、客户端需要一个kafka_client_jaas.conf

    KafkaClient {
       com.sun.security.auth.module.Krb5LoginModule required
       useTicketCache=true
       renewTicket=true
       serviceName="kafka";
    };
    Client {
       com.sun.security.auth.module.Krb5LoginModule required
       useTicketCache=true
       renewTicket=true
       serviceName="zookeeper";
    };
    

    4、然后一些sasl的配置,监听器的配置就不赘述了

    总结:之前对“主动发现集群机制”了解不够,也不知道消费时要对每一个broker都开一个长连接* 加上报错一直都是权限验证失败让人感觉是kerberos的问题,绕了很久。后面排除无关的因素,就很明显了。另外提醒ambari安装的kafka不管界面上配置的advertised.listeners是多少,内部代码还是会强行将listeners的值赋给advertised.listeners。

    还是很感谢大佬的及时回复 耐心指导。期待以后更多的交流

    8月前
  • 原来是我昆啊 回复 半兽人外网连接内网kafka-kerberos 报错验证失败! 中 :

    感谢大佬的指点,目前已经全部调通,包括kerberos环境!

    非kerberos环境最后配置的格式就是上面贴的。
    kerberos环境 大致还需要以下几点。

    1、kafka-server端加了环境变量

    export KAFKA_OPTS="-Djava.security.auth.login.config=/usr/hdp/current/kafka-broker/conf/kafka_jaas.conf"
    

    2、/etc/krb5.conf文件可能需要加一行udp_preference_limit = 1 将udp改成tcp防止丢包(这个不一定需要)

    3、客户端需要一个kafka_client_jaas.conf

    KafkaClient {
       com.sun.security.auth.module.Krb5LoginModule required
       useTicketCache=true
       renewTicket=true
       serviceName="kafka";
    };
    Client {
       com.sun.security.auth.module.Krb5LoginModule required
       useTicketCache=true
       renewTicket=true
       serviceName="zookeeper";
    };
    

    4、然后一些sasl的配置,监听器的配置就不赘述了

    总结:之前对“主动发现集群机制”了解不够,也不知道消费时要对每一个broker都开一个长连接* 加上报错一直都是权限验证失败让人感觉是kerberos的问题,绕了很久。后面排除无关的因素,就很明显了。另外提醒ambari安装的kafka不管界面上配置的advertised.listeners是多少,内部代码还是会强行将listeners的值赋给advertised.listeners。

    还是很感谢大佬的及时回复 耐心指导。期待以后更多的交流

    8月前
  • 半兽人 回复 原来是我昆啊外网连接内网kafka-kerberos 报错验证失败! 中 :

    配置没问题,可以的。

    8月前
  • 原来是我昆啊 回复 半兽人外网连接内网kafka-kerberos 报错验证失败! 中 :

    不好意思 环境配置 提供的有点问题
    实际是这样的
    dn86:

    port=26667
    advertised.listeners=PLAINTEXT://dn86:26667
    listeners=PLAINTEXT://内网ip:26667
    

    dn87:

    port=26668
    advertised.listeners=PLAINTEXT://dn87:26668
    listeners=PLAINTEXT://内网ip:26668
    

    然后在客户端添加dn86 dn87的域名映射
    我自己测试的结果写

    58.240.115.226 dn86
    58.240.115.226 dn87
    

    是不是这样就可以实现一个公网ip下的 “外网访问内网集群”

    8月前
  • 半兽人 回复 原来是我昆啊外网连接内网kafka-kerberos 报错验证失败! 中 :

    有点乱,你提供的配置。

    90.86

    listeners=PLAINTEXT://dn86:26667
    

    90.87

    listeners=PLAINTEXT://dn86:26668
    

    这个dn86是一样的?

    另外,你应该一个kafka集群走内网,客户端走外网,否则全走外网,kafka集群性能很差的。

    例如:

    port=26667
    advertised.listeners=PLAINTEXT://外网ip:26667
    listeners=PLAINTEXT://内网ip:26667
    
    8月前
  • 原来是我昆啊 回复 半兽人外网连接内网kafka-kerberos 报错验证失败! 中 :

    看了上述提到的文章 认真看了一遍 有解释单个公网ip不可以 也有称解决了的
    重新提问一个问题和我的验证思路
    我新找了个无kerberos的kafka环境
    90.86

    port=26667
    advertised.listeners=PLAINTEXT://dn86:26667
    listeners=PLAINTEXT://dn86:26667
    

    90.87

    port=26668
    advertised.listeners=PLAINTEXT://dn86:26668
    listeners=PLAINTEXT://dn86:26668
    

    将dn86的26667映射到外网的26667
    将dn87的26668映射成外网的26668

    在客户端90.86的/etc/hosts中配置

    58.240.115.226 dn86
    58.240.115.226 dn87
    

    启动

    cd /usr/hdp/3.1.0.0-78/kafka/bin/ && ./kafka-console-producer.sh --broker-list dn86:26667 --topic test_kk
    

    这样的话 不管从zk中返回的是dn86:26667 还是dn87:26668 那么访问的都是dn86 dn87两个节点 两个端口。

    想问一下 这种方案 理论上是否可行

    补充:因为90.86-87节点和测试的客户端节点70.110本身是能访问的,所以为了排除风险。

    在86 87上开了防火墙 86 87互为白名单,开放26667 26668 2181 端口,最后把70.110拉入黑名单,70.110直接访问86 87是不通的。

    截至目前是可以消费了(无kerberos)但是之前报错太多了 不是很确定,所以请大佬帮忙再看一下目前的方案理论上是否ok。

    8月前
  • 赞了 原来是我昆啊外网连接内网kafka-kerberos 报错验证失败! 的评论!

    公网ip只有一个,是不行的。因为kafka客户端要与每个node建立长连接,进行数据交换的。
    你可以参考:kafka外网访问 ,里面有外网转发的原因。

    另外注意,端口不能变,要映射一模一样的。
    最后,你做测试的时候,可以先不用kerberos,一步一步来,如果内网、外网消费和生产都可以了,在加上认证。

    8月前
  • 关注了用户 半兽人 · 9月前