首页 > 解决方案 > java.net.PortUnreachableException:ICMP 端口无法访问 - Kerberos 错误

问题描述

我正在尝试运行启用了 Kerberos 身份验证的 kafka 集群。kafka 代理、zookeeper 和 kdc (kerberos) 服务器作为 docker 网络中的容器启动。

Kafka 代理端口 9092 已映射到主机,因此能够从主机网络调用代理。

由于客户端必须首先与 Kdc 交互以进行 kerberos 身份验证,因此 KDC 容器的端口 88 也已从主机暴露并打开。

docker ps (for kdc container): a856bfe3f330 plaintext_kdc "/bin/sh -c '/usr/sb..." 11 hours ago Up 11 hours 0.0.0.0:88->88/tcp, :::88->88/ tcp kdc

/etc/krb5.conf :

[realms]
    TEST.CONFLUENT.IO = {
            kdc = 10.0.1.207      --(tried localhost also here)
    }

能够从主机远程登录 localhost 88。但是当我尝试从主机运行生产者时出现以下错误:(注意:能够在 docker 网络中生成和使用消息,从同一 docker 网络中的客户端 docker 容器生成)

/home/ubuntu/kafka-docker-for-nifi-integration/kafka_install/kafka_2.11-2.4.0/bin/kafka-console-producer.sh --broker-list localhost:29092 --topic kafka-nifi-sasl_gssapi_plaintext --producer.config producer_kt.properties org.apache.kafka.common.KafkaException: 无法在 org.apache.kafka.clients.producer.KafkaProducer.(KafkaProducer.java:432) 在 org.apache.kafka 构造 kafka 生产者。 clients.producer.KafkaProducer.(KafkaProducer.java:298) at kafka.tools.ConsoleProducer$.main(ConsoleProducer.scala:45) at kafka.tools.ConsoleProducer.main(ConsoleProducer.scala) 原因:org.apache.kafka .common.KafkaException:javax.security.auth.login.LoginException:org.apache.kafka.common.network 的 org.apache.kafka.common.network.SaslChannelBuilder.configure(SaslChannelBuilder.java:158) 上的 ICMP 端口无法访问。 ChannelBuilders.create(ChannelBuilders.java:146) 在 org.apache.kafka.clients.ClientUtils.createChannelBuilder(ClientUtils.java:99) 在 org.apache.kafka.clients 在 org.apache.kafka.common.network.ChannelBuilders.clientChannelBuilder(ChannelBuilders.java:67) .producer.KafkaProducer.newSender(KafkaProducer.java:450) at org.apache.kafka.clients.producer.KafkaProducer.(KafkaProducer.java:421) ... 3 更多原因:javax.security.auth.login.LoginException :在 jdk.security.auth/com.sun.security.auth.module.Krb5LoginModule 的 jdk.security.auth/com.sun.security.auth.module.Krb5LoginModule.attemptAuthentication(Krb5LoginModule.java:786) 处的 ICMP 端口无法访问。 login(Krb5LoginModule.java:592) 在 java.base/javax.security.auth.login.LoginContext.invoke(LoginContext.java:726) 在 java.base/javax.security.auth.login.LoginContext$4.run(LoginContext .java:665) 在 java.base/javax.security.auth.login.LoginContext$4。在 java.base/javax.security.auth.login.LoginContext.invokePriv(LoginContext.java:663) 在 java.base/java.security.AccessController.doPrivileged(Native Method) 在 java.run(LoginContext.java:663)。 base/javax.security.auth.login.LoginContext.login(LoginContext.java:574) 在 org.apache.kafka.common.security.authenticator.AbstractLogin.login(AbstractLogin.java:60) 在 org.apache.kafka。 common.security.kerberos.KerberosLogin.login(KerberosLogin.java:103) 在 org.apache.kafka.common.security.authenticator.LoginManager.(LoginManager.java:62) 在 org.apache.kafka.common.security.authenticator .LoginManager.acquireLoginManager(LoginManager.java:112) at org.apache.kafka.common.network.SaslChannelBuilder.configure(SaslChannelBuilder.java:147) ... 8 更多原因:java.net.PortUnreachableException: ICMP Port Unreachable at java.base/java.net.PlainDatagramSocketImpl。在 java.base/java.net.DatagramSocket.receive(DatagramSocket.java:814) 在 java.security.jgss/ 的 java.base/java.net.AbstractPlainDatagramSocketImpl.receive(AbstractPlainDatagramSocketImpl.java:181) 的 receive0(Native Method) sun.security.krb5.internal.UDPClient.receive(NetClient.java:205) at java.security.jgss/sun.security.krb5.KdcComm$KdcCommunication.run(KdcComm.java:404) at java.security.jgss/ sun.security.krb5.KdcComm$KdcCommunication.run(KdcComm.java:364) at java.base/java.security.AccessController.doPrivileged(Native Method) at java.security.jgss/sun.security.krb5.KdcComm.send (KdcComm.java:348) 在 java.security.jgss/sun.security.krb5.KdcComm.sendIfPossible(KdcComm.java:253) 在 java.security.jgss/sun.security.krb5.KdcComm.send(KdcComm.java :229) 在 java.security.jgss/sun.security.krb5.KdcComm.send(KdcComm.java:200) 在 java.security.jgss/sun.security。krb5.KrbAsReqBuilder.send(KrbAsReqBuilder.java:345) 在 java.security.jgss/sun.security.krb5.KrbAsReqBuilder.action(KrbAsReqBuilder.java:498) 在 jdk.security.auth/com.sun.security.auth。 module.Krb5LoginModule.attemptAuthentication(Krb5LoginModule.java:754)

谢谢马亨德拉

标签: apache-kafkakerberoskerberos-delegationmit-kerberos

解决方案


推荐阅读