sun*_*ize 5 hadoop hdfs apache-kafka apache-flink flink-streaming
在服务器上运行的 Flink 独立集群上,我正在 Scala 中开发 Flink 流作业。该作业使用来自 1 个以上 Kafka 主题的数据(进行一些格式化)并将结果写入 HDFS。
Kafka 主题之一和 HDFS,它们都需要单独的 Kerberos 身份验证(因为它们属于完全不同的集群)。
我的问题是:
security.kerberos.login.keytab并security.kerberos.login.principal在flink-conf.yaml可以在两个主体之间手动切换 Kerberos 身份验证。在krb5.conf文件的[realm] 部分,我指定了两个领域,一个用于 Kafka,另一个用于 HDFS。
kinit -kt path/to/hdfs.keytab [principal: xxx@XXX.XXX...]
kinit -kt path/to/kafka.keytab [principal: yyy@YYY.YYY...]
感谢您的关注和反馈!
距离我最初发表文章三年后,我们的架构已从独立的裸机服务器转移到 Mesos 上的 Docker 容器,但让我总结一下解决方法(针对 Flink 1.8):
\n放置krb5.conf所有领域定义和域领域映射(例如/etc/容器下方)
放置 Hadoop krb5.keytab(例如在 下/kerberos/HADOOP_CLUSTER.ORG.EXAMPLE.COM/)
配置Flink的security.kerberos.login.*属性在flink-conf.yaml
security.kerberos.login.use-ticket-cache: truesecurity.kerberos.login.principal: username@HADOOP_CLUSTER.ORG.EXAMPLE.COMsecurity.kerberos.login.contexts不应配置。这可确保 Flink 不会将 Hadoop\xe2\x80\x99s 凭证用于 Kafka 和 Zookeeper。将 Kafka 的密钥表复制到容器内的单独目录中(例如在 下/kerberos/KAFKA_CLUSTER.ORG.EXAMPLE.COM/)
定期运行自定义脚本以更新票证缓存
\nKINIT_COMMAND_1='kinit -kt /kerberos/HADOOP_CLUSTER.ORG.EXAMPLE.COM/krb5.keytab username@HADOOP_CLUSTER.ORG.EXAMPLE.COM'\nKINIT_COMMAND_2='kinit -kt /kerberos/KAFKA_CLUSTER.ORG.EXAMPLE.COM/krb5.keytab username@KAFKA_CLUSTER.ORG.EXAMPLE.COM -c /tmp/krb5cc_kafka'\n...\nRun Code Online (Sandbox Code Playgroud)\nsasl.jaas.config为实际的 JAAS 配置字符串。\nprops.setProperty("sasl.jaas.config", \n "com.sun.security.auth.module.Krb5LoginModule required " +\n "refreshKrb5Config=true " +\n "useKeyTab=true " +\n "storeKey=true " +\n "debug=true " +\n "keyTab=\\"/kerberos/KAFKA_CLUSTER.ORG.EXAMPLE.COM/krb5.keytab\\" " +\n "principal=\\"username@KAFKA_CLUSTER.ORG.EXAMPLE.COM\\";")\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
935 次 |
| 最近记录: |