首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >指向其他命名空间中的服务的ExternalName不解析,除非给出完整的FQDN

指向其他命名空间中的服务的ExternalName不解析,除非给出完整的FQDN
EN

Stack Overflow用户
提问于 2020-03-05 17:53:25
回答 1查看 1.7K关注 0票数 3

我在名称空间my-service中有一个ClusterIP类型的服务A,它可以将平衡加载到几个豆荚中。我希望在命名空间B中创建另一个类型为my-service的服务,该服务指向名称空间A中的my-service

我创建了以下YAML:

代码语言:javascript
复制
apiVersion: v1
kind: Service
metadata:
  name: my-service
  namespace: B
spec:
  type: ExternalName
  externalName: my-service.A

如果我执行一个运行在命名空间B中的荚,然后执行:

代码语言:javascript
复制
# ping my-service
ping: my-service: Name or service not known

但是,如果我将上述YAML中的externalName更改为以下所示:

代码语言:javascript
复制
apiVersion: v1
kind: Service
metadata:
  name: my-service
  namespace: B
spec:
  type: ExternalName
  externalName: my-service.A.svc.cluster.local   <--- full FQDN here

事情如预期的那样运作。另外,如果我直接从名称空间my-service中的pod中ping B,那么它将被解析:

代码语言:javascript
复制
# ping my-service.A
PING my-service.A.svc.cluster.local (10.0.80.133) 56(84) bytes of data.

为什么my-service.A不解析为my-service.A.svc.cluster.local中的ExternalName服务?

我的K8s版本是1.14.8,使用CoreDNS。

EN

回答 1

Stack Overflow用户

发布于 2020-03-06 09:57:07

基于kubernetes文件奥克,它应该是这样工作的

Kubernetes DNS调度集群上的DNS Pod和Service,并将kubelets配置为告诉单个容器使用DNS服务的IP来解析DNS名称。 什么东西能得到DNS名称? 在集群中定义的每个服务(包括DNS服务器本身)都被分配一个DNS名称。默认情况下,客户端Pod的DNS搜索列表将包括Pod自己的名称空间和集群的默认域

服务被分配一个DNS A或AAAA记录,这取决于服务的IP系列,以获取表单my-svc.my-namespace.svc.cluster-domain.example.的名称。这将解析为服务的群集IP。

当您想使用我的服务时,有来自kubedns的日志。

代码语言:javascript
复制
I0306 09:44:32.424126       1 logs.go:41] skydns: incomplete CNAME chain from "my-service.dis.": rcode 3 is not equal to success

这就是为什么您需要整个服务路径,在您的情况下,这是

代码语言:javascript
复制
my-service.A.svc.cluster.local

因为

使用外部域名服务告诉系统,externalName字段中的DNS名称(前一个示例中的example.domain.name)是支持该服务的资源的位置。当对Kubernetes DNS服务器发出DNS请求时,它在CNAME记录中返回externalName,告诉客户端查找返回的名称以获取IP地址。

我希望这个回答你的问题。如果你还有什么问题请告诉我。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60551378

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档