我有云上的Kubernetes集群和本地安全docker注册表(example.com,192.168.1.124)。当尝试从注册表( example.com /mongo)拉取镜像时,它正在解析真实example.com的IP,而不是为我的本地注册表解析。我已经在kube-system名称空间上创建了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,但问题仍然存在...
发布于 2018-08-20 09:09:13
我猜set dnsPolicy: ClusterFirstWithHostNet可以完成这项工作。
发布于 2018-08-21 22:20:00
pod启动时从注册表拉取镜像时使用的DNS设置与从集群内的pod调用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 on nodes将使用来自/etc/hosts的记录作为注册表,而不是全局DNS记录,因为该文件具有更高的优先级,您将能够使用您的镜像运行pod。
https://stackoverflow.com/questions/51921294
复制相似问题