温馨提示:本文翻译自stackoverflow.com,查看原文请点击:coredns - Kubernetes use private DNS

coredns - Kubernetes使用私有DNS

发布于 2020-03-29 22:00:21

在Kubernetes中可以使用私有DNS吗?例如,应用程序需要通过其主机名连接到外部数据库。解析IP的DNS条目存放在专用DNS中。

我的AKS(Azure Kubernetes服务)正在1.17版上运行,该版本已使用新的coreDNS。

我的第一个尝试是通过配置pod的/etc/resolve.conf文件,在VM上使用该私有DNS:

dnsPolicy: "None"
  dnsConfig:
    nameservers:
      - 10.76.xxx.xxx
      - 10.76.xxx.xxx
    searches:
      - az-q.example.com
    options:
      - name: ndots
        value: "2"

然后我尝试使用configmap来调整coreDNS:

apiVersion: v1
kind: ConfigMap
metadata:
  name: kube-dns
  namespace: kube-system
data:
  upstreamNameservers: |
    ["10.76.xxx.xxx", "10.76.xxx.xxx"]

但是我的pod每次在部署时都出现错误:

$ sudo kubectl logs app-homepage-backend-xxxxx -n ingress-nginx
events.js:174
      throw er; // Unhandled 'error' event
      ^
Error: getaddrinfo ENOTFOUND az-q.example.com az-q.example.com:636
    at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:56:26)

我想念什么?

查看更多

提问者
Nico Schuck
被浏览
74
Bernard Halas 2020-02-05 19:09

为了实现您的需求,我先dnsPolicy: ClusterFirst在pod清单中定义,然后在群集DNS子系统中定义存根区域(私有DNS区域)。

为了标识群集DNS堆栈,通常检查kube-system名称空间中运行的Pod 您很可能会发现以下两个之一:CoreDNS或Kube-DNS。

如果您的群集DNS在CoreDNS上运行,请configmap中查找这种修改coredns如果您在较旧的Kube-DNS系统上运行,请configmap中查找修改kube-dns

重要的是要说,如果要将此修改应用于在主机网络模式下运行的Pod(kube-system名称空间中的许多Pod ),则需要使用dnsPolicy: ClusterFirstWithHostNet来修改其清单