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

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

我的第一个尝试是通过配置pod的/etc/resolve.conf文件在VM上使用该私有(private)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)

我想念什么?

最佳答案

为了实现您的需求,我将在pod list 中使用dnsPolicy: ClusterFirst定义,然后在您的群集DNS子系统中定义一个存根区域(私有(private)DNS区域)。

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

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

重要的是要说,如果要将此修改应用于在主机网络模式下运行的Pod(许多来自kube-system命名空间的Pod),则需要使用dnsPolicy: ClusterFirstWithHostNet节修改它们的 list 。

关于kubernetes - Kubernetes使用私有(private)DNS,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59991592/

10-16 09:25