目前能够将所有服务解析到IP地址和telnet,并对它们进行ping。无法将荚解析为IP地址。尽管可以使用kubectl和telnet查找pod地址,并对它们进行ping。如何需要配置DNS以解析Kubernetes 1.9.6,dns-控制器:1.9.1中的吊舱。
发布于 2019-01-08 20:13:10
@mk_sta 's的回答稍微简单一些,您可以运行这条内线来测试您的DNS:
kubectl run busybox --image=busybox --rm --attach --command -- sh -c "cat /etc/resolv.conf; nslookup $POD.$NAMESPACE.pod.cluster.local"
示例输出:
If you don't see a command prompt, try pressing enter.
Server: 100.64.0.10
Address: 100.64.0.10:53
*** Can't find $POD.$NAMESPACE.pod.cluster.local: No answer
deployment.apps "busybox" deleted更重要的是,它在运行后删除了部署/吊舱。
对我来说,问题是我的荚处于状态集,因此Pod DNS解析有点不同。您必须使用(例如):
web-{0..N-1}.nginx.default.svc.cluster.local
pod-N.$GOVERNING_STATEFULSET.$NAMESPACE.svc.cluster.local
https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/
这是一件可能出错的事。你可能想提供更多关于你的特殊情况的信息。
发布于 2018-09-04 11:46:55
您可以使用busybox创建测试Pod,以检查DNS解决函数并调试该问题:
apiVersion: v1
kind: Pod
metadata:
name: busybox
namespace: default
spec:
containers:
- image: busybox
command:
- sleep
- "3600"
imagePullPolicy: IfNotPresent
name: busybox
restartPolicy: Always检查/etc/resolv.conf Pod上的busybox文件:
kubectl exec busybox cat /etc/resolv.conf内容应如下:
search default.svc.cluster.local svc.cluster.local cluster.local .....
nameserver 10.0.0.10
options ndots:5对集群中的目标Pod发出查找请求:
kubectl exec -ti busybox -- nslookup XXX-XX-XX-XX.default.pod.cluster.local如果尚未解析Pods名称,可以使用kubectl logs命令检查DNS组件日志:
kubectl logs --namespace=kube-system $(kubectl get pods --namespace=kube-system -l k8s-app=kube-dns -o name) -c kubedns
kubectl logs --namespace=kube-system $(kubectl get pods --namespace=kube-system -l k8s-app=kube-dns -o name) -c dnsmasq
kubectl logs --namespace=kube-system $(kubectl get pods --namespace=kube-system -l k8s-app=kube-dns -o name) -c healthz发布于 2020-03-19 17:52:29
我看到的解决这一问题的最佳方法是创建一个跳跃式Pod。
步骤1.创建带有规范文件的吊舱。
cat << ENDL >> jumpod.yml
apiVersion: v1
kind: Pod
metadata:
name: jumpod
namespace: default
spec:
containers:
- name: busybox
image: busybox:1.28
command:
- sleep
- "3600"
imagePullPolicy: IfNotPresent
restartPolicy: Always
ENDL第二步,以太将吊舱应用或创建到集群和节点上。注意,它将位于默认的命名空间中。
kubectl apply -f jumpod.yml现在,您可以使用这个吊舱来获取pod或Service的DNS。
例如:
Pod nslookup步骤3.获取您要查找的豆荚的ip地址。
kubectl get pods -o wide步骤4.使用跳槽进行nslookup
kubectl exec -it jumpod ping 10.244.0.149Service nslookup步骤5.查找您可能要使用的服务ip地址。
kubectl get services --all-namespaces步骤6.现在使用跳转荚对服务ip地址执行nslookup。
kubectl exec -it jumpod nslookup 10.245.150.103下面是一个示例,说明使用nslookup的主集群将如何工作,以及busybox (也称为跳转吊舱)如何工作。
$ kubectl exec -it jumpod nslookup 10.245.150.103
Server: 10.245.0.10
Address 1: 10.245.0.10 kube-dns.kube-system.svc.cluster.local
Name: 10.245.150.103
Address 1: 10.245.150.103 hello.develop.svc.cluster.local
$ nslookup 10.245.150.103
Server: 8.8.8.8
Address: 8.8.8.8#53
** server can't find 103.150.245.10.in-addr.arpa: NXDOMAIN希望这能有所帮助!
如果碰巧你需要导出你在荚中创建的DNS文件,你可以使用它。
kubectl cp default/POD_NAME:bin/FILE_NAME /Users/username/FILE_NAME或者只需使用>将其导出到文件。
https://serverfault.com/questions/929211
复制相似问题