Shu*_*ham 5 dns cname kubernetes coredns kubernetes-service
我my-service在命名空间中有一个 ClusterIP 类型的服务A,可以对几个 Pod 进行负载平衡。我想在命名空间中创建另一个B指向my-service命名空间的ExternalName类型的服务A。
我创建以下 YAML:
apiVersion: v1
kind: Service
metadata:
name: my-service
namespace: B
spec:
type: ExternalName
externalName: my-service.A
Run Code Online (Sandbox Code Playgroud)
如果我执行到命名空间中运行的 podB并执行以下操作:
# ping my-service
ping: my-service: Name or service not known
Run Code Online (Sandbox Code Playgroud)
externalName但是如果我将上面的 YAML更改为以下内容:
# ping my-service
ping: my-service: Name or service not known
Run Code Online (Sandbox Code Playgroud)
事情按预期进行。另外,如果我my-service直接从命名空间中的 pod执行 ping 操作B,则会解决该问题:
# ping my-service.A
PING my-service.A.svc.cluster.local (10.0.80.133) 56(84) bytes of data.
Run Code Online (Sandbox Code Playgroud)
为什么 在ExternalName Service 中my-service.A没有解析为?my-service.A.svc.cluster.local
我的 K8s 版本是1.14.8并使用 CoreDNS。
基于kubernetes 文档和okd这就是它应该如何工作
\n\n\nKubernetes DNS 在集群上调度 DNS Pod 和 Service,并配置 kubelet 告诉各个容器使用 DNS Service\xe2\x80\x99s IP 来解析 DNS 名称。
\n什么东西获取 DNS 名称?
\n集群中定义的每个服务(包括 DNS 服务器本身)都分配有一个 DNS 名称。默认情况下,客户端 Pod\xe2\x80\x99s DNS 搜索列表将包含 Pod\xe2\x80\x99s自己的命名空间和 cluster\xe2\x80\x99s 默认域。
\n
\n\n根据服务的 IP 系列,为服务分配 DNS A 或 AAAA 记录,名称格式为my-svc.my-namespace.svc.cluster-domain.example。这将解析为服务的集群 IP。
\n
当你想使用my-service时,有来自kubedns的日志。A
\nI0306 09:44:32.424126 1 logs.go:41] skydns: incomplete CNAME chain from "my-service.dis.": rcode 3 is not equal to success\nRun Code Online (Sandbox Code Playgroud)\n这就是为什么您需要服务的完整路径,在您的情况下是
\nmy-service.A.svc.cluster.local\nRun Code Online (Sandbox Code Playgroud)\n因为
\n\n\n使用外部域名服务告诉系统 externalName 字段中的 DNS 名称(上例中的 example.domain.name )是支持该服务的资源的位置。当向 Kubernetes DNS 服务器发出 DNS 请求时,它会在 CNAME 记录中返回 externalName,告诉客户端查找返回的名称以获取 IP 地址。
\n
我希望这能回答你的问题。如果您还有其他问题,请告诉我。
\n| 归档时间: |
|
| 查看次数: |
2332 次 |
| 最近记录: |