首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Kubernetes (K8S)集群中pod内部的"nslookup: read: Connection refused“(DNS问题)

问Kubernetes (K8S)集群中pod内部的"nslookup: read: Connection refused“(DNS问题)
EN

Stack Overflow用户
提问于 2020-04-10 20:44:55
回答 1查看 2.6K关注 0票数 0

问题

我在基于CentOS7的AWS ec2上有一个带有1个主服务器和1个节点的k8s集群的自定义安装。当调用nslookup google.com时,它在节点pod内使用核心DNS(pod运行正常,日志中没有错误),输出为nslookup: write to '10.96.0.10': Connection refused ;; connection timed out; no servers could be reached

例如,在pod ping 8.8.8.8内执行fine命令就可以正常工作:

代码语言:javascript
复制
PING 8.8.8.8 (8.8.8.8): 56 data bytes
64 bytes from 8.8.8.8: seq=0 ttl=50 time=1.330 ms

pod中的/etc/resolv.conf如下所示:

代码语言:javascript
复制
nameserver 10.96.0.10
search default.svc.cluster.local svc.cluster.local cluster.local ec2.internal
options ndots:5

此命令在节点本身的nslookup google.com中运行良好

代码语言:javascript
复制
Server:         172.31.0.2
Address:        172.31.0.2#53

Non-authoritative answer:
Name:   google.com
Address: 172.217.15.110
Name:   google.com
Address: 2607:f8b0:4004:801::200e

Kubelet配置kubectl get configmap kubelet-config-1.17 -n kube-system -o yaml返回

代码语言:javascript
复制
data:
  kubelet: |
    apiVersion: kubelet.config.k8s.io/v1beta1
    authentication:
      anonymous:
        enabled: false
      webhook:
        cacheTTL: 0s
        enabled: true
      x509:
        clientCAFile: /etc/kubernetes/pki/ca.crt
    authorization:
      mode: Webhook
      webhook:
        cacheAuthorizedTTL: 0s
        cacheUnauthorizedTTL: 0s
    clusterDNS:
    - 10.96.0.10
    clusterDomain: cluster.local
    cpuManagerReconcilePeriod: 0s
    evictionPressureTransitionPeriod: 0s
    fileCheckFrequency: 0s
    healthzBindAddress: 127.0.0.1
    healthzPort: 10248
    httpCheckFrequency: 0s
    imageMinimumGCAge: 0s
    kind: KubeletConfiguration
    nodeStatusReportFrequency: 0s
    nodeStatusUpdateFrequency: 0s
    rotateCertificates: true
    runtimeRequestTimeout: 0s
    staticPodPath: /etc/kubernetes/manifests
    streamingConnectionIdleTimeout: 0s
    syncFrequency: 0s
    volumeStatsAggPeriod: 0s
kind: ConfigMap

kube命名空间kubectl get pods -n kube-system中的Pods如下所示:

代码语言:javascript
复制
coredns-6955765f44-qdbgx                                1/1     Running   6          11d
coredns-6955765f44-r4v7n                                1/1     Running   6          11d
etcd-ip-172-31-42-121.ec2.internal                      1/1     Running   7          11d
kube-apiserver-ip-172-31-42-121.ec2.internal            1/1     Running   7          11d
kube-controller-manager-ip-172-31-42-121.ec2.internal   1/1     Running   6          11d
kube-proxy-lrpd9                                        1/1     Running   6          11d
kube-proxy-z55cv                                        1/1     Running   6          11d
kube-scheduler-ip-172-31-42-121.ec2.internal            1/1     Running   6          11d
weave-net-bdn5n                                         2/2     Running   0          39h
weave-net-z7mks                                         2/2     Running   5          39h

更新

在pod中,如果我执行ip route,它将返回:

代码语言:javascript
复制
default via 10.32.0.1 dev eth0 
10.32.0.0/12 dev eth0 scope link  src 10.32.0.16 

来自master:

代码语言:javascript
复制
default via 172.31.32.1 dev eth0 
10.32.0.0/12 dev weave proto kernel scope link src 10.32.0.1 
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1 
172.31.32.0/20 dev eth0 proto kernel scope link src 172.31.42.121 

发件人节点:

代码语言:javascript
复制
default via 172.31.32.1 dev eth0 
10.32.0.0/12 dev weave proto kernel scope link src 10.32.0.1 
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1 
172.31.32.0/20 dev eth0 proto kernel scope link src 172.31.46.62 

CoreDNS配置映射kubectl -n kube-system get configmap coredns -oyaml为:

代码语言:javascript
复制
apiVersion: v1
data:
  Corefile: |
    .:53 {
        log
        errors
        health {
           lameduck 5s
        }
        ready
        kubernetes cluster.local in-addr.arpa ip6.arpa {
           pods insecure
           fallthrough in-addr.arpa ip6.arpa
           ttl 30
        }
        prometheus :9153
        forward . /etc/resolv.conf
        cache 30
        loop
        reload
        loadbalance
    }
kind: ConfigMap

那么为什么nslookup google.com不能在pod中工作呢?

EN

回答 1

Stack Overflow用户

发布于 2020-04-14 04:39:09

k8s群集安装错误,可能的脚本应包含ec2虚拟机上的主服务器和节点的正确内网IP。

代码语言:javascript
复制
dev-kubernetes-master ansible_host=34.233.207.xxx private_ip=172.31.37.xx
dev-kubernetes-slave ansible_host=52.6.10.xxx private_ip=172.31.42.xxx

我已经重新安装了指定了正确内网ip的集群(在没有内网ip之前),问题已经解决了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61140524

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档