在GKE上,kube-dns在我的节点上运行,我可以看到docker容器。
我确实可以通过名称访问服务,这对于负载平衡是完美合适的解决方案的所有这些应用程序都很好,但是 * 我如何使用DNS访问单个Pod?*
我知道我可以在API中查找特定的pod,但我需要自己更新hosts
文件,并继续观察pod列表。DNS应该为我做这件事,那么它在pod中的使用意味着什么?
Kubernetes文档说DNS信息需要传递到kubelet,但我在GKE上无法访问,所以它只是没有在GKE上设置,或者有什么事情可以激活它?
我的一些服务(特别是zookeeper)自己知道其他节点,并试图通过主机名(即pod名称)连接到它们,除非我自己更新hosts
文件,否则会失败。我想使用集成的DNS服务。
如能就如何做到这一点提供指导,将不胜感激。
谢谢
3条答案
按热度按时间3mpgtkmj1#
更新
根据文档,现在的格式是:
_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
更新:
DNS自2015年9月起可用于Pod参见PR:https://github.com/kubernetes/kubernetes/pull/13759
简而言之:
这将以
<podIP>.<namespace>.pod.<clusterSuffix>
的形式给予pod dns当前可以禁用,但对于所有pod都是打开或关闭。olmpazwi2#
Kubernetes statefulset支持关联一个服务名,并通过服务名定义pod dns名称。
例如创建一个zk守护进程和一个zk服务,那么zk守护进程的第一个pod的dns名称是zk-0.$(servicename).$(namespace).svc.cluster.local
更多详情请参见:https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/
**重要:**服务 * 必须 * 是“无头”的,也就是说它的
.spec.clusterIP
* 必须 * 是None
。lokaqttq3#
Kubernetes为
StatefulSet
的所有组件提供稳定的网络ID考虑以下示例:
然后,您将在k8s集群中拥有以下可解析的DNS条目:
myservice.mynamespace.svc.cluster.local
,用于通过myservice
对其中一个myapp
Pod进行负载平衡访问myapp-0.myservice.mynamespace.svc.cluster.local
用于直接访问myapp
StatetefulSet
的Pod 0myapp-1.myservice.mynamespace.svc.cluster.local
用于直接访问myapp
StatetefulSet
的Pod 1文件:https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/#stable-network-id