在GKE上, kube-dns 正在我的节点上运行,我可以看到docker容器。
我可以按名称访问服务,这对于所有这些负载均衡是非常合适的解决方案的应用程序非常有用,但如何使用DNS访问各个pod?
我知道我可以在API中查找特定的pod,但我需要自己更新hosts
文件,并继续观看pod列表。 DNS应该为我这样做,所以如何在pod中使用它?
Kubernetes doc说DNS信息需要传递给kubelet,但是我无法访问我知道的GKE上的内容,所以它只是没有在GKE上设置那样,或者有什么办法可以激活它?
我的一些服务(特别是zookeeper)自己知道其他节点,并尝试通过主机名(即pod名称)连接到它们,并且除非我自己更新hosts
文件,否则会失败。我想使用集成的DNS服务。
任何有关如何执行此操作的指导将不胜感激。
由于
答案 0 :(得分:3)
<强>更新强>
根据文档,格式现在是:
_my-port-name._my-port-protocol.my-svc.my-namespace.svc.cluster.local
请在此处查看相关文档: https://kubernetes.io/docs/concepts/services-networking/dns-pod-service/#pods
原始答案:
截至此日期,实际上这是不可能的......但是Kubernetes团队正在研究它。
请参阅此问题:https://github.com/kubernetes/kubernetes/issues/13552
<强>更新强>:
自2015年9月起,DNS可用于Pod 见PR:https://github.com/kubernetes/kubernetes/pull/13759
简而言之:
这将给出pods dns的形式
<podIP>.<namespace>.pod.<clusterSuffix>
目前可以禁用,但是 是开启所有播放或关闭。
答案 1 :(得分:2)
Kubernetes statefulset支持关联服务名称,并按服务名称定义pod dns名称。
例如你创建一个zk守护进程和一个zk服务,那么zk daemonset的第一个pod的dns名称是zk-0。$(namespace).svc.cluster.local
更多细节见: https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/
重要提示:服务必须为“headless”才能实现此功能,即.spec.clusterIP
必须为None
。