首页 > 解决方案 > Kubernetes 不会从没有 FQDN 的不同命名空间解析 Pod

问题描述

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

Podpod-name在 a 中运行Deployment并在内部作为Service service-namevia ClusterIPon暴露namespace-a。Kubernetes 1.17 集群有一个集群域名cluster-domaincluster-domain不是默认cluster.local值。

另一个 Pod尝试解析batman.namespace-bpod-name

  1. 以下作品来自batmanping/telnet pod-name.service-name.namespace-a.svc.cluster-domain
  2. 以下不适用于batmanping/telnet pod-name.service-name.namespace-a.svc

但是,如果batman正在运行namespace-a: 3. 以下确实适用于batmanping/telnet pod-name.service-name.namespace-a.svc

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

标签: kubernetesdns

解决方案


据我所知,这是它应该如何工作的。

我可以推荐阅读Debugging DNS Resolution,您可以在其中找到是否正在接收/处理 DNS 查询

log 您可以通过将插件添加到 CoreDNS 配置(又名 Corefile)来验证 CoreDNS 是否正在接收查询 。CoreDNS 核心文件保存在名为 coredns. 要编辑它,请使用命令...</p>

kubectl -n kube-system edit configmap coredns

然后 log 按照下面的示例添加 Corefile 部分。

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 正在接收查询,您应该在日志中看到它们。

您还可以检查服务和 Pod 的DNS和自定义 DNS 服务


推荐阅读