从 kubernetes 文档中我看到有一个 DNS based service discovery机制。谷歌容器引擎是否支持这一点。如果是这样,发现在容器引擎中运行的服务的 DNS 名称格式是什么。我在容器引擎文档中找不到相关信息。
最佳答案
服务的 DNS 名称如下:{service-name}.{namespace}.svc.cluster.local
.
假设您配置了 kubectl
要使用您的集群,您应该能够通过以下步骤获取您的服务和命名空间详细信息。
获取您的命名空间
$ kubectl get namespaces
NAME LABELS STATUS
default <none> Active
kube-system <none> Active
您应该忽略
kube-system
条目,因为那是针对集群本身的。所有其他条目都是您的 namespaces
.默认情况下会有一个名为 default
的额外命名空间。 .获取您的服务
$ kubectl get services
NAME LABELS SELECTOR IP(S) PORT(S)
broker-partition0 name=broker-partition0,type=broker name=broker-partition0 10.203.248.95 5050/TCP
broker-partition1 name=broker-partition1,type=broker name=broker-partition1 10.203.249.91 5050/TCP
kubernetes component=apiserver,provider=kubernetes <none> 10.203.240.1 443/TCP
service-frontend name=service-frontend,service=frontend name=service-frontend 10.203.246.16 80/TCP
104.155.61.198
service-membership0 name=service-membership0,partition=0,service=membership name=service-membership0 10.203.246.242 80/TCP
service-membership1 name=service-membership1,partition=1,service=membership name=service-membership1 10.203.248.211 80/TCP
此命令列出集群中可用的所有服务。例如,如果我想获取
service-frontend
的 IP 地址我可以使用以下 DNS:service-frontend.default.svc.cluster.local
.使用 busybox pod 验证 DNS
您可以创建一个 busybox pod 并使用该 pod 来执行
nslookup
命令查询DNS服务器。$ kubectl create -f - << EOF
apiVersion: v1
kind: Pod
metadata:
name: busybox
namespace: default
spec:
containers:
- image: busybox
command:
- sleep
- "3600"
imagePullPolicy: IfNotPresent
name: busybox
restartPolicy: Always
EOF
现在你可以做一个
nslookup
从集群中的 pod。$ kubectl exec busybox -- nslookup broker-partition0.default.svc.cluster.local
Server: 10.203.240.10
Address 1: 10.203.240.10
Name: service-frontend.default.svc.cluster.local
Address 1: 10.203.246.16
在这里您可以看到
Addres 1
条目是service-frontend
的IP服务,与kubectl get services
列出的IP地址相同.
关于kubernetes - Google Container Engine 是否支持基于 DNS 的服务发现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32862698/