【问题标题】:Configure custom DNS in kubernetes在 Kubernetes 中配置自定义 DNS
【发布时间】:2019-12-18 20:20:03
【问题描述】:

我想在 CoreDNS 中配置自定义 DNS(绕过 NAT 环回问题,这意味着在网络内,IP 的解析方式与网络外不同)。

我尝试使用“假”域修改 CoreDNS 的 ConfigMap 只是为了进行测试,但它不起作用。 我正在使用 minik8s

这里是config map coredns的配置文件:

apiVersion: v1
data:
  Corefile: |
    .:53 {
        errors
        health
        ready
        kubernetes cluster.local in-addr.arpa ip6.arpa {
          pods insecure
          fallthrough in-addr.arpa ip6.arpa
        }
        prometheus :9153
        forward . 8.8.8.8 8.8.4.4
        cache 30
        loop
        reload
        loadbalance
    }
    consul.local:53 {
        errors
        cache 30
        forward . 10.150.0.1
    }
kind: ConfigMap

然后我尝试使用忙框解析此地址,但它不起作用。

$kubectl exec -ti busybox -- nslookup test.consul.local
> nslookup: can't resolve 'test.consul.local'
command terminated with exit code 1

甚至 Kubernetes 的 DNS 都失败了

$ kubectl exec -ti busybox -- nslookup kubernetes.default
nslookup: can't resolve 'kubernetes.default'
command terminated with exit code 1

【问题讨论】:

  • 试试busybox:1.28
  • @OlegButuzov 在不修改 DNS ConfigMap 的情况下使用相同的忙框图像时,它可以工作

标签: kubernetes coredns microk8s


【解决方案1】:

我已经复制了您的场景,它按预期工作。

在这里,我将描述在 Kubernetes 上使用自定义 DNS 的两种不同方法。第一个是在 Pod 级别。您可以自定义 pod 将使用的 DNS 服务器。这在您不想为所有 pod 更改此配置的特定情况下很有用。

为此,您需要添加一些可选字段。要了解更多信息,请阅读this。 示例:

kind: Pod
metadata:
  name: busybox-custom
  namespace: default
spec:
  containers:
  - name: busybox
    image: busybox:1.28
    command:
      - sleep
      - "3600"
    imagePullPolicy: IfNotPresent
  dnsPolicy: "None"
  dnsConfig:
    nameservers:
      - 8.8.8.8
    searches:
      - ns1.svc.cluster-domain.example
      - my.dns.search.suffix
    options:
      - name: ndots
        value: "2"
      - name: edns0
  restartPolicy: Always
$ kubectl exec -ti busybox-custom -- nslookup cnn.com
Server:    8.8.8.8
Address 1: 8.8.8.8 dns.google

Name:      cnn.com
Address 1: 2a04:4e42::323
Address 2: 2a04:4e42:400::323
Address 3: 2a04:4e42:200::323
Address 4: 2a04:4e42:600::323
Address 5: 151.101.65.67
Address 6: 151.101.129.67
Address 7: 151.101.193.67
Address 8: 151.101.1.67
$ kubectl exec -ti busybox-custom -- nslookup kubernetes.default
Server:    8.8.8.8
Address 1: 8.8.8.8 dns.google

nslookup: can't resolve 'kubernetes.default'
command terminated with exit code 1

如您所见,此方法会产生解析内部 DNS 名称的问题。

实现此目的的第二种方法是在集群级别更改 DNS。这是您选择的方式,如您所见。

$ kubectl get cm coredns -n kube-system -o yaml
apiVersion: v1
data:
  Corefile: |
    .:53 {
        errors
        health
        kubernetes cluster.local in-addr.arpa ip6.arpa {
           pods insecure
           upstream
           fallthrough in-addr.arpa ip6.arpa
           ttl 30
        }
        prometheus :9153
        forward . 8.8.8.8 8.8.4.4
        cache 30
        loop
        reload
        loadbalance
    }
kind: ConfigMap

如您所见,我没有 consul.local:53 条目。

Consul 是用于连接和保护服务的服务网络解决方案 跨任何运行时平台和公共或私有云

这种设置并不常见,我认为您不需要在设置中包含此条目。 这可能是您的问题,当我添加此条目时,我遇到了您报告的相同问题。

$ kubectl exec -ti busybox -- nslookup cnn.com
Server:    10.96.0.10
Address 1: 10.96.0.10 kube-dns.kube-system.svc.cluster.local

Name:      cnn.com
Address 1: 2a04:4e42:200::323
Address 2: 2a04:4e42:400::323
Address 3: 2a04:4e42::323
Address 4: 2a04:4e42:600::323
Address 5: 151.101.65.67
Address 6: 151.101.193.67
Address 7: 151.101.1.67
Address 8: 151.101.129.67
$ kubectl exec -ti busybox -- nslookup kubernetes.default
Server:    10.96.0.10
Address 1: 10.96.0.10 kube-dns.kube-system.svc.cluster.local

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

另一个主要问题是您正在使用最新的 busybox 映像调试 DNS。我强烈建议您避免使用任何比 1.28 更新的版本,因为它已经知道 problems 关于名称解析。

可用于解决 DNS 问题的最佳 busybox 映像是 1.28,因为在 cmets 上推荐使用 Oleg Butuzov。

【讨论】:

  • 您的 coredns 是“香草”(默认),您没有放置任何“额外”的 dns,所以是的,它可以工作。但我希望能够在我的集群中全局解析“假”DNS,这意味着例如将呼叫从“consul.local”转发到 10.150.0.1。
  • 您的领事正在回答 DNS 咨询?你的领事 DNS IP 地址是什么? kubectl get svc | grep "consul-dns"
  • 好的,我明白你的意思,转发是转发到另一个 DNS,而不是转发到主机名的服务器。实际上我想要的不是配置另一个 DNS,而是为自定义域配置带有 A 和 Cname 的 CoreDNS。我弄错了,将尝试找到如何使用 A 和 Cname 配置 CoreDNS
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-12
  • 1970-01-01
  • 1970-01-01
  • 2021-07-01
  • 2021-08-08
相关资源
最近更新 更多