我在云上有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
,但是问题仍然存在。...
答案 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。