在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)
我想念什么?
为了实现您的需求,我先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
节来修改其清单。