0

我正在尝试按照此博客文章中的示例为我的 pod 提供上游 DNS 服务器。

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

$ kubectl version
Client Version: version.Info{Major:"1", Minor:"6", GitVersion:"v1.6.0", GitCommit:"fff5156092b56e6bd60fff75aad4dc9de6b6ef37", GitTreeState:"clean", BuildDate:"2017-03-28T16:36:33Z", GoVersion:"go1.7.5", Compiler:"gc", Platform:"darwin/amd64"}
Server Version: version.Info{Major:"1", Minor:"6", GitVersion:"v1.6.0", GitCommit:"fff5156092b56e6bd60fff75aad4dc9de6b6ef37", GitTreeState:"clean", BuildDate:"2017-03-28T16:24:30Z", GoVersion:"go1.7.5", Compiler:"gc", Platform:"linux/amd64"}

然后,我在以下 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 服务或 pod)?谢谢!

编辑:删除和重新创建 ConfigMap确实有效,但不完全是我希望的方式。我的 docker 注册表位于私有(公司)网络上,解析注册表的名称需要上游名称服务器。所以我不能在我的 pod yaml 文件上使用注册表的 DNS 名称,但是从该 yaml 文件创建的 pod 将具有所需的 DNS 解析(在替换 ConfigMap 之后)

4

3 回答 3

1

kube-dnspod 在重新启动后应用了最近的 configMap 更改。但是,仍然遇到类似的问题。

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

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

尝试将--cluster-dns值更改为已经为我连接内部和外部网络的主机服务器“名称服务器”IP。重新启动 kubelet 服务以使更改生效。

Environment="KUBELET_DNS_ARGS=**--cluster-dns=<<your-nameserver-resolver>>** --cluster-domain=cluster.local"/etc/systemd/system/kubelet.service.d/10-kubeadm.conf

这样可行 !!!现在容器能够连接外部网络。

于 2017-04-12T02:00:56.747 回答
1

我相信您的ConfigMap配置是正确的,而您确实需要restart kube-dns

因为ConfigMap是通过envpairs或者volumes(kube-dns使用volume)注入到pod中,所以需要重启目标pod(这里我指的是所有 kube-dnspod)才能生效。

另一个建议是,根据您的描述,您只希望此上游 dns 帮助您访问私有网络中的 docker 注册表,然后我建议您可能想尝试stubDomains您提到的那篇文章中。

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

希望这会帮助你。

于 2017-04-12T15:23:14.913 回答
1

根据我的经验ConfigMap,当我更新它时,更改似乎没有反映在使用ConfigMap.

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

因此,我建议尝试重新启动kube-dnspod,它似乎使用了ConfigMap您创建的这个。

于 2017-04-11T06:10:05.783 回答