简而言之,我在一个Pod中有两个容器,分别位于端口80和9000上,名为a
和b
。他们可以通过127.0.0.1:80
和127.0.0.1:9000
相互联系。他们还能通过名字互相联系吗?
我尝试了a.podname:90
,b.podname:9000
,podname:80
和其他变体而没有运气。
有http://kubernetes.io/docs/admin/dns/#a-records,但是这些是基于POD分配的IP的,该IP事先未知。
也有http://kubernetes.io/docs/admin/dns/#srv-records,但是它们取决于服务,因此取决于准备条件。此外,SRV是有时无法使用的DNS扩展。
背景:要保持容器与Kubernetes和其他Docker环境兼容,您必须避免依赖于localhost,但可以依赖于固定的端口号。例如,如果在Kubernetes中有一个名称解析为127.0.0.1或POD的IP,则该名称可以在docker-compose中用作https://docs.docker.com/compose/compose-file/#/links别名。
特别是我正在尝试解决https://github.com/Reposoft/docker-svn/issues/8
最佳答案
如果您始终要在容器中运行两个容器,则无论该容器在何处调度,都可以依靠localhost:xyz
进行访问。
如果要使用DNS名称,则可以为SRV记录创建a headless service。您可以使用注释service.alpha.kubernetes.io/tolerate-unready-endpoints覆盖准备行为。那应该给您一个DNS名称以到达您的Pod。
关于kubernetes - 容器中的容器如何通过名称相互引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40678327/