Google GKE kubernetes DNS 无法解析服务名称
Google GKE kubernetes DNS fail to resolve service name
我在 GKE 上遇到 Kubernetes 问题。
我无法使用内部 DNS 按名称解析服务。
这是我的配置
Google GKE v1.15
kubectl get namespaces
NAME STATUS AGE
custom-metrics Active 183d
default Active 245d
dev Active 245d
kube-node-lease Active 65d
kube-public Active 245d
kube-system Active 245d
stackdriver Active 198d
我已经部署了几个基于 openjdk 11 docker 图像的简单服务,并使用 spring 引导 + 执行器制作,以便有一个 /actuator/health 端点在开发中进行测试
kubectl get pods --namespace=dev
NAME READY STATUS RESTARTS AGE
test1-5d86946c49-h9t9l 1/1 Running 0 3h1m
test2-5bb5f4ff8d-7mzc8 1/1 Running 0 3h10m
如果我尝试在
下执行
kubectl --namespace=dev exec -it test1-5d86946c49-h9t9 -- /bin/bash
root@test1-5d86946c49-h9t9:/app# cat /etc/resolv.conf
nameserver 10.40.0.10
search dev.svc.cluster.local svc.cluster.local cluster.local europe-west1-b.c.back-office-236415.internal c.back-office-236415.internal google.internal
options ndots:5
root@test1-5d86946c49-h9t9:/app# nslookup test2
Server: 10.40.0.10
Address: 10.40.0.10#53
** server can't find test2: NXDOMAIN
如果我尝试使用 test2 服务并尝试解析 test1,也会出现同样的问题。命名空间是否有特殊配置来启用 DNS 解析?这不应该是自动的吗?
我使用主版本 1.15 和服务类型“ClusterIP”复制了此内容。我能够从一项服务的 Pod 查找到另一项服务。对于在 Google Kubernetes Engine 集群中创建 Kubernetes 服务 [1] 可能会有帮助。
查看服务:
$ kubectl get svc --namespace=default
要访问部署:
$ kubectl exec -it [Pod 名称] sh
要查找:
$ nslookup [服务名称]
集群中定义的每个服务(包括 DNS 服务器本身)都分配有一个 DNS 名称。默认情况下,客户端 Pod 的 DNS 搜索列表将包括 Pod 自己的命名空间和集群的默认域。
“正常”(非无头)服务被分配了一个 DNS A 记录,其名称格式为 my-svc.my-namespace.svc.cluster-domain.example。这解析为服务的集群 IP。
对于“无头”(没有集群 IP)服务,还为 name.Though 分配了 DNS A 记录,这解析为服务选择的 pods 的 IP 集。
但是,DNS 策略可以在每个 pod 的基础上设置。目前 Kubernetes 支持以下特定于 pod 的 DNS 策略。这些策略在 Pod 规范的 dnsPolicy 字段中指定 [2]:
“Default”:Pod继承pods 运行所在节点的名称解析配置。
“ClusterFirst“:任何与配置的集群域后缀不匹配的 DNS 查询,例如“www.kubernetes.io”,都会转发到从节点继承的上游名称服务器。集群管理员可能配置了额外的存根域和上游 DNS 服务器。
“ClusterFirstWithHostNet”:对于Pods 运行 hostNetwork,需要设置其DNS策略“ClusterFirstWithHostNet”。
“None“:它允许 Pod 忽略来自 Kubernetes 环境的 DNS 设置。所有 DNS 设置都应该使用 Pod 规范中的 dnsConfig 字段提供。
[1]-https://cloud.google.com/kubernetes-engine/docs/how-to/exposing-apps
[2]-https://kubernetes.io/docs/concepts/services-networking/dns-pod-service/#pod-s-dns-config
我在 GKE 上遇到 Kubernetes 问题。 我无法使用内部 DNS 按名称解析服务。
这是我的配置
Google GKE v1.15
kubectl get namespaces
NAME STATUS AGE
custom-metrics Active 183d
default Active 245d
dev Active 245d
kube-node-lease Active 65d
kube-public Active 245d
kube-system Active 245d
stackdriver Active 198d
我已经部署了几个基于 openjdk 11 docker 图像的简单服务,并使用 spring 引导 + 执行器制作,以便有一个 /actuator/health 端点在开发中进行测试
kubectl get pods --namespace=dev
NAME READY STATUS RESTARTS AGE
test1-5d86946c49-h9t9l 1/1 Running 0 3h1m
test2-5bb5f4ff8d-7mzc8 1/1 Running 0 3h10m
如果我尝试在
下执行kubectl --namespace=dev exec -it test1-5d86946c49-h9t9 -- /bin/bash
root@test1-5d86946c49-h9t9:/app# cat /etc/resolv.conf
nameserver 10.40.0.10
search dev.svc.cluster.local svc.cluster.local cluster.local europe-west1-b.c.back-office-236415.internal c.back-office-236415.internal google.internal
options ndots:5
root@test1-5d86946c49-h9t9:/app# nslookup test2
Server: 10.40.0.10
Address: 10.40.0.10#53
** server can't find test2: NXDOMAIN
如果我尝试使用 test2 服务并尝试解析 test1,也会出现同样的问题。命名空间是否有特殊配置来启用 DNS 解析?这不应该是自动的吗?
我使用主版本 1.15 和服务类型“ClusterIP”复制了此内容。我能够从一项服务的 Pod 查找到另一项服务。对于在 Google Kubernetes Engine 集群中创建 Kubernetes 服务 [1] 可能会有帮助。
查看服务: $ kubectl get svc --namespace=default
要访问部署: $ kubectl exec -it [Pod 名称] sh
要查找: $ nslookup [服务名称]
集群中定义的每个服务(包括 DNS 服务器本身)都分配有一个 DNS 名称。默认情况下,客户端 Pod 的 DNS 搜索列表将包括 Pod 自己的命名空间和集群的默认域。
“正常”(非无头)服务被分配了一个 DNS A 记录,其名称格式为 my-svc.my-namespace.svc.cluster-domain.example。这解析为服务的集群 IP。
对于“无头”(没有集群 IP)服务,还为 name.Though 分配了 DNS A 记录,这解析为服务选择的 pods 的 IP 集。
但是,DNS 策略可以在每个 pod 的基础上设置。目前 Kubernetes 支持以下特定于 pod 的 DNS 策略。这些策略在 Pod 规范的 dnsPolicy 字段中指定 [2]:
“Default”:Pod继承pods 运行所在节点的名称解析配置。
“ClusterFirst“:任何与配置的集群域后缀不匹配的 DNS 查询,例如“www.kubernetes.io”,都会转发到从节点继承的上游名称服务器。集群管理员可能配置了额外的存根域和上游 DNS 服务器。
“ClusterFirstWithHostNet”:对于Pods 运行 hostNetwork,需要设置其DNS策略“ClusterFirstWithHostNet”。
“None“:它允许 Pod 忽略来自 Kubernetes 环境的 DNS 设置。所有 DNS 设置都应该使用 Pod 规范中的 dnsConfig 字段提供。
[1]-https://cloud.google.com/kubernetes-engine/docs/how-to/exposing-apps [2]-https://kubernetes.io/docs/concepts/services-networking/dns-pod-service/#pod-s-dns-config