Dns 如何解决服务';从kubernetes节点到IP的名称';谁的观点?
我有一个kubernetes群集在GCE上运行 我创建了一个设置,其中我有两个吊舱Dns 如何解决服务';从kubernetes节点到IP的名称';谁的观点?,dns,kubernetes,kube-dns,Dns,Kubernetes,Kube Dns,我有一个kubernetes群集在GCE上运行 我创建了一个设置,其中我有两个吊舱glusterfs-server-1和glusterfs-server-2,它们是我的gluster服务器 2glusterfsd守护进程正确通信,我能够创建复制卷,向它们写入文件,并查看两个pod上正确复制的文件 我还有一个名为glusterfs server的服务,可以自动平衡我的两个glusterfs吊舱之间的流量 在另一个吊舱内,我可以发布mount-t glusterfs glusterfs server
glusterfs-server-1
和glusterfs-server-2
,它们是我的gluster服务器
2glusterfsd
守护进程正确通信,我能够创建复制卷,向它们写入文件,并查看两个pod上正确复制的文件
我还有一个名为glusterfs server
的服务,可以自动平衡我的两个glusterfs吊舱之间的流量
在另一个吊舱内,我可以发布mount-t glusterfs glusterfs server:/myvolume/mnt/myvolume
,一切都很正常
现在,我真正想要的是在创建容器时能够在.yaml文件中使用glusterfs
卷类型:
…被截断了。。。
规格:
卷数:
-名称:myvolume
glusterfs:
端点:glusterfs服务器
路径:myvolume
…截断了。。。
不幸的是,这不起作用。我找到了它不起作用的原因:
当直接连接到kubernetes节点时,发出一个mount-t glusterfs glusterfs server:/myvolume/mnt/myvolume
不起作用,这是因为从我的节点的角度来看glusterfs server
不能解析为任何IP地址。(即getent主机glusterfs服务器
不返回任何内容)
而且,由于glusterfs的工作方式,即使直接使用服务的IP也会失败,因为glusterfs最终仍会尝试解析名称glusterfs服务器
(并且失败)
现在,为了好玩并验证这是问题所在,我编辑了我节点的resolv.conf
(通过放置我的kube dns IP地址和搜索域),以便它能够正确解析我的POD和服务IP地址。然后,我终于能够在节点上成功地发布mount-t glusterfs glusterfs server:/myvolume/mnt/myvolume
。然后我还可以使用glusterfs卷(使用上面的PodSpec)创建一个pod
现在,我相当确定修改我节点的resolv.conf
是一个糟糕的想法:kubernetes有名称空间的概念,如果两个不同名称空间中的两个服务共享相同的名称(比如glusterfs服务),那么getent hosts glusterfs服务将解析为生活在两个不同名称空间中的两个不同IP
所以我的问题是:
要使我的节点能够解析我的POD/服务IP地址,我可以做些什么?您可以修改resolv.conf
并使用完整的服务名称以避免冲突。通常是这样的:service\u name.default.svc.cluster.local
和service\u name.kube system.svc.cluster.local
或任何名称空间。我最初不想修改节点的resolv.conf,因为我假设由于默认情况下还没有修改,所以可能有一个很好的理由。我发现这只是因为在许多不同的发行版上配置resolv.conf太复杂了。