use*_*081 5 kubernetes coredns
我使用 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
Run Code Online (Sandbox Code Playgroud)
以下命令无响应
# 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.
Run Code Online (Sandbox Code Playgroud)
并且没有警戒线输出日志
# kubectl logs coredns-78fcdf6894-h78sd -n kube-system
Run Code Online (Sandbox Code Playgroud)
我想也许出了什么问题,但我找不到问题所在,另一个问题是为什么主节点上有两个 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
Run Code Online (Sandbox Code Playgroud)
也无法访问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
Run Code Online (Sandbox Code Playgroud)
我想也许我错误配置了网络这是我的集群初始化命令
kubeadm init --kubernetes-version=v1.11.3 --apiserver-advertise-address=10.100.1.20 --pod-network-cidr=172.16.0.0/16
Run Code Online (Sandbox Code Playgroud)
这是 calico ip 池集
# 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
Run Code Online (Sandbox Code Playgroud)
您可以首先检查 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
Run Code Online (Sandbox Code Playgroud)
如果返回输出,则意味着 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
Run Code Online (Sandbox Code Playgroud)
最后使用以下命令检查 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
Run Code Online (Sandbox Code Playgroud)
您可以通过将日志插件添加到 CoreDNS 配置(也称为 Corefile)来验证 CoreDNS 是否正在接收查询。CoreDNS Corefile 保存在名为 coredns 的 ConfigMap 中
希望这可以帮助。
编辑:
您可能遇到了这个问题,请查看:
https://github.com/kubernetes/kubeadm/issues/1056
归档时间: |
|
查看次数: |
14930 次 |
最近记录: |