Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dns 如何解决服务';从kubernetes节点到IP的名称';谁的观点?_Dns_Kubernetes_Kube Dns - Fatal编程技术网

Dns 如何解决服务';从kubernetes节点到IP的名称';谁的观点?

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

我有一个kubernetes群集在GCE上运行

我创建了一个设置,其中我有两个吊舱
glusterfs-server-1
glusterfs-server-2
,它们是我的gluster服务器

2
glusterfsd
守护进程正确通信,我能够创建复制卷,向它们写入文件,并查看两个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太复杂了。