Kubernetes 上的服务发现

Service discovery on Kubernetes

我在裸机 kubernetes 集群上设置了 kubeDNS。我认为这将允许我访问所描述的服务 here(http:// 对于那些不想遵循 link 的人),但是当我 运行

curl https://monitoring-influxdb:8083

我收到错误

curl: (6) Could not resolve host: monitoring-influxdb

当我 运行 卷曲任何命名空间中的服务名称时,情况就是如此。这是我的 kubDNS 设置错误还是我需要采取不同的步骤才能实现此目的?当我 运行 在 this article 结束时进行测试时,我得到了预期的输出。

供参考:

kubeDNS controller yaml files

kubeDNS service yaml file

kubelet flags

output of kubectl get svc in default and kube-system namespaces

您正在尝试的服务发现记录在 https://kubernetes.io/docs/concepts/services-networking/dns-pod-serv‌ ice 中,用于通信 一个 pod 与现有服务通信,而不是从节点(或主节点)与 Kubernetes 服务对话。

您将希望以 <servicename>.<namespace><servicename>.<namespace>.svc.cluster.local 的形式为服务利用 DNS。要在操作中查看此操作,请使用 busybox(或使用您自己的现有 pod)启动一个交互式 pod,如:

  • kubectl run -i --tty alpine-interactive --image=alpine --restart=Never

并在此处提供的 shell 中,执​​行 nslookup 命令。根据您的示例,我猜您正在尝试从 https://github.com/kubernetes/heapster/tree/master/deploy/kube-config/influxdb 访问 influxDB,然后它将被安装到 kube-system 命名空间中,并且您在内部从另一个 Pod 使用的服务名称将被安装到集群将是:

  • monitoring-influxdb.kube-system.svc.cluster.local

例如:

kubectl run -i --tty alpine --image=alpine --restart=Never
If you don't see a command prompt, try pressing enter.
/ # nslookup monitoring-influxdb.kube-system.svc.cluster.local
Server:    10.96.0.10
Address 1: 10.96.0.10 kube-dns.kube-system.svc.cluster.local

Name:      monitoring-influxdb.kube-system.svc.cluster.local
Address 1: 10.102.27.233 monitoring-influxdb.kube-system.svc.cluster.local

正如@Michael Hausenblas 在评论中指出的那样,curl http://monitoring-influxdb:8086 需要来自 pod 中的 运行。这样做提供了预期的结果