【发布时间】:2019-12-20 15:19:48
【问题描述】:
我在 GKE 上遇到 Kubernetes 问题。 我无法使用内部 DNS 按名称解析服务。
这是我的配置
谷歌 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 boot + actuator 制作,以便在 dev 中测试 /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 解析?这不应该是自动的吗?
【问题讨论】:
-
是否已分别为
test1和test2(裸)Pod/部署创建了名为test1和test2的 Kubernetes Services?例如。这会返回任何 Kubernetes 服务吗:kubectl get svc --namespace=dev? -
是的,这两个服务都是通过部署创建的,但是您的评论非常有帮助,在我创建了几个服务 (nodeport) 之后,我能够通过 nodeports 服务查询 test1 和 test2。我认为 pod 不是必需的,因为 kuberenetes 会自动公开每个 pod 并认为是 DNS 名称。非常感谢
标签: kubernetes namespaces google-kubernetes-engine kube-dns