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
解决方法
最终有效的解决办法是:重启coredns的Pod。
kubectl -n kube-system rollout restart deployment coredns
备注
minikube启动时指定的虚拟网卡是否能访问网络,如果不能访问网络,则coredns不能解析外部网络的域名(如:在Pod中nslookup baidu.com是无法查询到的。)
补充
有些JDK镜像是slim版本,没有curl、nslookup等命令,可以使用kubectl debug命令来注入sidecar容器来帮助排查。
busybox、alpine等容器没有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: 3,392 · Posted: 2022-11-19
————        END        ————
Give me a Star, Thanks:)
https://github.com/fendoudebb/LiteNote扫描下方二维码关注公众号和小程序↓↓↓
Loading...