gpt4 book ai didi

kubernetes - Minikube的CoreDNS无法从JVM解析名称

转载 作者:行者123 更新时间:2023-12-02 12:10:41 29 4
gpt4 key购买 nike

我们的JVM服务(基于Java SE 8 / Scala / Finagle)在解析DNS名称时遇到问题。我检查了coredns命名空间中的kube-system部署日志,发现java.net.InetAddress.getAllByName()正在查询ANY记录类型。
如果我通过nslookup检查名称解析,则可以确认ANY记录类型不可解析,但是AAAAA记录为:

# kubectl exec -i -t dnsutils -- nslookup -type=a weather.mab.matjazmav.test
Server: 10.96.0.10
Address: 10.96.0.10#53

Name: dev-proxy.default.svc.cluster.local
Address: 10.100.187.185

# kubectl exec -i -t dnsutils -- nslookup -type=any weather.mab.matjazmav.test
Server: 10.96.0.10
Address: 10.96.0.10#53

*** Can't find weather.mab.matjazmav.test: No answer
我的问题是,如何使Minikube的CoreDNS响应 ANY查询,或者如何强制 java.net.InetAddress发送 AAAAA查询?
编辑:
原来,我们使用了Java SE 8( sun.net.spi.nameservice.provider.1=dns,sun)附带的旧NS提供程序,有关详细信息,请参见我的答案。

最佳答案

我发现了两种可能的解决方案:
1.使用CoreDNS重写插件
将查询类型从ANY重写为A。这是文档的链接:https://coredns.io/plugins/rewrite/
2.在JVM 中使用默认的NS提供程序
仅当您在Jave SE 8或更早版本上运行时才适用。 Java SE 9删除了此系统属性,在此处了解更多信息:https://www.oracle.com/java/technologies/javase/9-removed-features.html#JDK-8134577
Java SE 8附带了两个NS提供程序defaultdns,sundefault提供程序使用系统的NS提供程序,而dns,sun使用一些旧的NS实现。
要使用default NS提供程序,只需设置以下属性:

sun.net.spi.nameservice.provider.1=default
在这里阅读更多: https://docs.oracle.com/javase/8/docs/technotes/guides/net/properties.html
这也是一本好书: https://medium.com/@maheshsenni/host-name-resolution-in-java-80301fea465a

关于kubernetes - Minikube的CoreDNS无法从JVM解析名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63413023/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com