gpt4 book ai didi

kubernetes - coredns 无法正确解析服务名称

转载 作者:行者123 更新时间:2023-12-02 11:37:39 28 4
gpt4 key购买 nike

我使用 Kubernetes v1.11.3,它使用 coredns 来解析主机或服务名称,但我在 pod 中发现,解析无法正常工作,

# kubectl get services --all-namespaces -o wide
NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
default kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 50d <none>
kube-system calico-etcd ClusterIP 10.96.232.136 <none> 6666/TCP 50d k8s-app=calico-etcd
kube-system kube-dns ClusterIP 10.96.0.10 <none> 53/UDP,53/TCP 50d k8s-app=kube-dns
kube-system kubelet ClusterIP None <none> 10250/TCP 32d <none>
testalex grafana NodePort 10.96.51.173 <none> 3000:30002/TCP 2d app=grafana
testalex k8s-alert NodePort 10.108.150.47 <none> 9093:30093/TCP 13m app=alertmanager
testalex prometheus NodePort 10.96.182.108 <none> 9090:30090/TCP 16m app=prometheus

以下命令无响应
# kubectl exec -it k8s-monitor-7ddcb74b87-n6jsd -n testalex /bin/bash
[root@k8s-monitor-7ddcb74b87-n6jsd /]# ping k8s-alert
PING k8s-alert.testalex.svc.cluster.local (10.108.150.47) 56(84) bytes of data.

并且没有警戒线输出日志
# kubectl logs coredns-78fcdf6894-h78sd -n kube-system

我想可能有问题,但我找不到问题所在,另一个问题是为什么主节点上有两个 coredns pod,它假设每个节点上都有一个

更新

看起来 coredns 工作正常,但我不明白 ping 命令没有返回
[root@k8s-monitor-7ddcb74b87-n6jsd yum.repos.d]# nslookup kubernetes.default
Server: 10.96.0.10
Address: 10.96.0.10#53

Name: kubernetes.default.svc.cluster.local
Address: 10.96.0.1

[root@k8s-monitor-7ddcb74b87-n6jsd yum.repos.d]# cat /etc/resolv.conf
nameserver 10.96.0.10
search testalex.svc.cluster.local svc.cluster.local cluster.local
options ndots:5

# kubectl get ep kube-dns --namespace=kube-system

NAME ENDPOINTS AGE
kube-dns 192.168.121.3:53,192.168.121.4:53,192.168.121.3:53 + 1 more... 50d

也无法访问 dns 服务器
# kubectl exec -it k8s-monitor-7ddcb74b87-n6jsd -n testalex /bin/bash
[root@k8s-monitor-7ddcb74b87-n6jsd /]# cat /etc/resolv.conf
nameserver 10.96.0.10
search testalex.svc.cluster.local svc.cluster.local cluster.local
options ndots:5
[root@k8s-monitor-7ddcb74b87-n6jsd /]# ping 10.96.0.10
PING 10.96.0.10 (10.96.0.10) 56(84) bytes of data.
^C
--- 10.96.0.10 ping statistics ---
9 packets transmitted, 0 received, 100% packet loss, time 8000ms

我想也许我错误地配置了网络
这是我的集群初始化命令
 kubeadm init --kubernetes-version=v1.11.3  --apiserver-advertise-address=10.100.1.20 --pod-network-cidr=172.16.0.0/16 

这是 calico ip pool set
# kubectl exec -it calico-node-77m9l -n kube-system /bin/sh
Defaulting container name to calico-node.
Use 'kubectl describe pod/calico-node-77m9l -n kube-system' to see all of the containers in this pod.
/ # cd /tmp
/tmp # ls
calicoctl tunl-ip
/tmp # ./calicoctl get ipPool
CIDR
192.168.0.0/16

最佳答案

您可以先检查 dns 是否正常工作

从 pod k8s-monitor-7ddcb74b87-n6jsd 内部在 kubernetes.default 上运行 nslookup,检查它是否正常工作。

[root@k8s-monitor-7ddcb74b87-n6jsd /]# nslookup kubernetes.default
Server: 10.96.0.10
Address: 10.96.0.10#53

Name: kubernetes.default.svc.cluster.local
Address: 10.96.0.1

如果这返回输出,则意味着所有内容都在 coredns 中工作。如果输出不正常,则查看 pod k8s-monitor-7ddcb74b87-n6jsd 中的 resolve.conf,它应该返回如下输出:
[root@metrics-master-2 /]# cat /etc/resolv.conf 
nameserver 10.96.0.10
search default.svc.cluster.local svc.cluster.local cluster.local ec2.internal
options ndots:5

最后使用以下方法检查 coredns 端点是否暴露:
kubectl get ep kube-dns --namespace=kube-system
NAME ENDPOINTS AGE
kube-dns 10.180.3.17:53,10.180.3.17:53 1h

您可以通过将日志插件添加到 CoreDNS 配置(又名 Corefile)来验证 CoreDNS 是否正在接收查询。 CoreDNS Corefile 保存在名为 coredns 的 ConfigMap 中

希望这可以帮助。

编辑:

您可能遇到了这个问题,请查看:

https://github.com/kubernetes/kubeadm/issues/1056

关于kubernetes - coredns 无法正确解析服务名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53332869/

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