minikube Pod 无法解析 Service 主机名

minikube Kubernetes kubectl About 1,430 words

现象

使用nslookup查询Service名称,无法找到对应主机的IP,显示为NXDOMAIN

/ # nslookup myspringboot
Server:         10.96.0.10
Address:        10.96.0.10:53

** server can't find myspringboot.default.svc.cluster.local: NXDOMAIN

** server can't find myspringboot.svc.cluster.local: NXDOMAIN

** server can't find myspringboot.cluster.local: NXDOMAIN

** server can't find myspringboot.cluster.local: NXDOMAIN

** server can't find myspringboot.default.svc.cluster.local: NXDOMAIN

** server can't find myspringboot.svc.cluster.local: NXDOMAIN

尝试解决(无效)

修改 net bridge 策略

查看nf-call相关参数

sudo modprobe br_netfilter
sudo sysctl -a | grep nf-call

输出

net.bridge.bridge-nf-call-arptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1

修改

echo '1' > /proc/sys/net/bridge/bridge-nf-call-iptables

备注:因为minikube的虚拟机默认是Buildroot,没有curl、包管理器等命令。默认的nf-call值都已经被赋予了1

修改 coredns ConfigMap

备注:默认都已经配置正确

kubectl -n kube-system edit configmaps coredns -o yaml

解决方法

最终有效的解决办法是:重启corednsPod

kubectl -n kube-system rollout restart deployment coredns

备注

minikube启动时指定的虚拟网卡是否能访问网络,如果不能访问网络,则coredns不能解析外部网络的域名(如:在Podnslookup baidu.com是无法查询到的。)

补充

有些JDK镜像是slim版本,没有curlnslookup等命令,可以使用kubectl debug命令来注入sidecar容器来帮助排查。

busyboxalpine等容器没有curl。如果需要curl可以使用nginx-alpine容器(镜像解压后大小23MB左右)

kubectl debug myspringboot -it --image=nginx:1.21.6-alpine -- sh

参考

https://stackoverflow.com/questions/45805483/kubernetes-pods-cant-resolve-hostnames

Views: 2,364 · Posted: 2022-11-19

————        END        ————

Give me a Star, Thanks:)

https://github.com/fendoudebb/LiteNote

扫描下方二维码关注公众号和小程序↓↓↓

扫描下方二维码关注公众号和小程序↓↓↓


Today On History
Browsing Refresh