在新Kubernetes 1.6群集上的kube系统命名空间中创建kube dns配置映射

在新Kubernetes 1.6群集上的kube系统命名空间中创建kube dns配置映射,kubernetes,google-kubernetes-engine,kube-dns,Kubernetes,Google Kubernetes Engine,Kube Dns,我正试图按照中的示例为我的POD提供上游DNS服务器 我在us-east1-d中创建了一个新的GKE集群(根据4月4日的条目,1.6.0可用) 然后,我在以下YAML文件kube-dns-cm.yml中定义了一个ConfigMap: apiVersion: v1 kind: ConfigMap metadata: name: kube-dns namespace: kube-system data: upstreamNameservers: | ["1.2.3

我正试图按照中的示例为我的POD提供上游DNS服务器

我在us-east1-d中创建了一个新的GKE集群(根据4月4日的条目,1.6.0可用)

然后,我在以下YAML文件kube-dns-cm.yml中定义了一个ConfigMap:

 apiVersion: v1
 kind: ConfigMap
 metadata:
   name: kube-dns
   namespace: kube-system
 data:
   upstreamNameservers: |
     ["1.2.3.4"]
当我尝试创建ConfigMap时,我被告知它已经存在:

$ kubectl create -f kube-dns-cm.yml
Error from server (AlreadyExists): error when creating "kube-dns-cm.yml": configmaps "kube-dns" already exists
我尝试删除现有的ConfigMap并用我自己的替换它,但是当我随后创建pod时,它们似乎没有生效(名称没有像我希望的那样解析)。是否有比博客文章中解释的更多的故事(例如,重新启动kube dns服务或pods)?谢谢


编辑:删除并重新创建ConfigMap确实有效,但并非完全如我所希望的那样。我的docker注册表位于私有(公司)网络上,解析注册表名称需要上游名称服务器。因此,我无法在我的pod yaml文件上使用注册表的DNS名称,但从该yaml文件创建的pod将具有所需的DNS分辨率(在替换ConfigMap后)

我在
ConfigMap
方面的经验是,当我更新它时,这些更改似乎没有反映在使用
ConfigMap
的正在运行的pod中

因此,当我删除pod并且pod再次出现时,它会显示最新的
ConfigMap


因此,我建议尝试重新启动
kube dns
pod,它似乎使用了您创建的
ConfigMap

根据我对
ConfigMap
的经验,当我更新它时,这些更改似乎不会反映在使用
ConfigMap
的运行pod中

因此,当我删除pod并且pod再次出现时,它会显示最新的
ConfigMap


因此,我建议尝试重新启动
kube dns
pod,它似乎使用了您创建的
ConfigMap

kube dns
pod在重新启动后应用了最近的ConfigMap更改。但是,仍然有类似的问题

使用
kubectl日志--namespace=kube-system$(kubectl-get-pods--namespace=kube-system-l k8s-app=kube-dns-o-name)-c dnsmasq检查日志

kubectl日志--namespace=kube-system$(kubectl-get-pods--namespace=kube-system-l k8s-app=kube-dns-o name)-c kubedns

已尝试将
--群集dns
值更改为主机服务器“nameserver”ip,该ip已为我连接内部和外部网络。重新启动kubelet服务以使更改生效

/etc/systemd/system/KUBELET.service.d/10 kubeadm.conf中的
Environment=“KUBELET\u DNS\u ARGS=**--cluster DNS=**--cluster domain=cluster.local”


那就行了!!!现在容器可以连接外部网络。

kube dns
pod在重新启动后应用了最近的configMap更改。但是,仍然有类似的问题

使用
kubectl日志--namespace=kube-system$(kubectl-get-pods--namespace=kube-system-l k8s-app=kube-dns-o-name)-c dnsmasq检查日志

kubectl日志--namespace=kube-system$(kubectl-get-pods--namespace=kube-system-l k8s-app=kube-dns-o name)-c kubedns

已尝试将
--群集dns
值更改为主机服务器“nameserver”ip,该ip已为我连接内部和外部网络。重新启动kubelet服务以使更改生效

/etc/systemd/system/KUBELET.service.d/10 kubeadm.conf中的
Environment=“KUBELET\u DNS\u ARGS=**--cluster DNS=**--cluster domain=cluster.local”


那就行了!!!现在容器可以连接外部网络了。

我相信您的
ConfigMap
配置是正确的,而您确实需要重新启动
kube dns

因为
ConfigMap
是通过
env
对或卷(
kube dns
use volume)注入pod的,所以您需要重新启动目标pod(这里我的意思是所有
kube dns
pod)以使其生效

另一个建议是,根据您的描述,您只希望此上游dns帮助您访问位于专用网络中的docker注册表,然后我建议您可以尝试
stubDomains

最重要的,您需要检查
dnsPolicy
是否设置为
ClusterFirst
,尽管根据您的描述,我猜是这样


希望这对您有所帮助。

我相信您的
ConfigMap
配置是正确的,而您确实需要重新启动
kube dns

因为
ConfigMap
是通过
env
对或卷(
kube dns
use volume)注入pod的,所以您需要重新启动目标pod(这里我的意思是所有
kube dns
pod)以使其生效

另一个建议是,根据您的描述,您只希望此上游dns帮助您访问位于专用网络中的docker注册表,然后我建议您可以尝试
stubDomains

最重要的,您需要检查
dnsPolicy
是否设置为
ClusterFirst
,尽管根据您的描述,我猜是这样

希望这能帮到你

$ kubectl create -f kube-dns-cm.yml
Error from server (AlreadyExists): error when creating "kube-dns-cm.yml": configmaps "kube-dns" already exists