在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/