Kubernetes DNSPolicy配置

时间:2018-08-19 19:50:05

标签: docker dns kubernetes

我在云上有Kubernetes集群,并且有本地安全docker登录(example.com,192.168.1.124)。 尝试从注册表(example.com/mongo)中提取图片时,它解析的是真实example.com的IP,而不是我的本地注册表。 我已经在kube系统名称空间上创建了ConfigMap:

Name:         marketplace-dns
Namespace:    kube-system
Labels:       <none>
Annotations:  <none>

Data
====
configmap_dns.yaml:
----
apiVersion: v1
kind: ConfigMap
metadata:
  name: kube-dns
  namespace: kube-system
data:
  stubDomains: |
    {"example.com": ["192.168.1.124"]}
Events:  <none>

在我的kubernetes部署yaml上设置hostNetwork: true dnsPolicy: ClusterFirst,但是问题仍然存在。...

2 个答案:

答案 0 :(得分:0)

我想dnsPolicy: ClusterFirstWithHostNet可以完成任务。

答案 1 :(得分:0)

从Pod Start上的注册表中提取映像时,使用的DNS设置与从群集内的Pod中调用DNS时使用的DNS设置不同。

当Kubernetes统计新Pod时,它会将其调度到节点,然后名为kubelet的节点上的代理调用容器引擎(在您的情况下为Docker)下载映像并以设计的配置运行它。

Docker使用系统DNS解析注册表的地址,因为它可以在您的主机系统上运行,而不是在Kubernetes中运行,这就是为什么任何DNS设置都不会影响映像下载阶段的DNS解析的原因。 Here是在Github上进行的讨论。

如果要更改DNS设置并覆盖注册表IP以在映像下载阶段使用它,则应以某种方式在主机系统中进行设置。在您的配置中,您需要修改群集中所有节点上的DNS设置。最简单的方法是使用/etc/hosts文件,并使用您的自定义IP添加记录,例如192.168.1.124 example.com。您也可以修改本地DNS解析器(如果有)等。

进行此修改后,节点上的Docker将使用/etc/hosts中的记录而不是全局DNS记录作为注册表,因为该文件具有更高的优先级,并且您将能够使用映像运行pod。