没有FQDN的情况下,Kubernetes不会从其他命名空间解析Pod

时间:2020-03-08 16:44:13

标签: kubernetes service dns pod

假设我们有两个命名空间namespace-anamespace-b

Pod pod-name运行在Deployment中,并通过Service上的service-name在内部显示为ClusterIP namespace-a。 Kubernetes 1.17群集具有群集域名cluster-domaincluster-domain不是默认的cluster.local

batman上的另一个Pod namespace-b尝试解析pod-name的IP地址。

  1. 以下来自batman的作品: ping/telnet pod-name.service-name.namespace-a.svc.cluster-domain
  2. 以下{strong>无效在batman中无效:ping/telnet pod-name.service-name.namespace-a.svc

但是,如果batmannamespace-a上运行: 3.以下可以batman中起作用:ping/telnet pod-name.service-name.namespace-a.svc

这与DNS配置有关吗?这是应该如何工作的吗?我找不到有关此问题的任何具体材料。

2 个答案:

答案 0 :(得分:0)

如果要使用cluster.domain而不是默认的cluster.local,则需要在kubelet中使用标志--cluster-domain=cluster.domain配置

还需要修改CoreDNS Corefile的ConfigMap来更改默认值

apiVersion: v1
kind: ConfigMap
metadata:
  name: coredns
  namespace: kube-system
data:
  Corefile: |
    .:53 {
        errors
        health {
            lameduck 5s
        }
        ready
        kubernetes cluster.domain 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
    }

要验证您是否检查了pod内的/etc/resolve.conf文件

search default.svc.cluster.domain svc.cluster.domain cluster.domain google.internal c.gce_project_id.internal
nameserver 10.0.0.10
options ndots:5

答案 1 :(得分:0)

据我所知,这是应该起作用的方式。

我建议阅读Debugging DNS Resolution,在那里您可以找到Are DNS queries being received/processed

您可以通过将log插件添加到CoreDNS配置(也称为Corefile)来验证CoreDNS是否正在接收查询。 CoreDNS Corefile保存在名为coredns的ConfigMap中。要对其进行编辑,请使用命令...

kubectl -n kube-system edit configmap coredns

然后按照以下示例在Corefile部分添加log

apiVersion: v1
kind: ConfigMap
metadata:
  name: coredns
  namespace: kube-system
data:
  Corefile: |
    .:53 {
        log
        errors
        health
        kubernetes cluster.local in-addr.arpa ip6.arpa {
          pods insecure
          upstream
          fallthrough in-addr.arpa ip6.arpa
        }
        prometheus :9153
        proxy . /etc/resolv.conf
        cache 30
        loop
        reload
        loadbalance
    }

保存更改后,Kubernetes最多可能需要一两分钟的时间才能将这些更改传播到CoreDNS pod。

接下来,进行一些查询,并按照本文档上面的各个部分查看日志。如果CoreDNS Pod正在接收查询,则应在日志中看到它们。

您还可以选中DNS for Services and PodsCustomizing DNS Service