从kubernetes文档中我看到有DNS based service discovery机制。 Google Container Engine是否支持此功能。如果是这样,发现在Container Engine中运行的服务的DNS名称格式是什么。我在Container Engine文档中找不到相关信息。
答案 0 :(得分:6)
服务的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并使用该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
现在,您可以从群集中的pod中执行nslookup
。
$ 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地址相同。
答案 1 :(得分:1)
它的工作方式与您链接的文档中提到的方式相同。你试过吗? (即&#34; my-service.my-ns&#34;)