提问者:小点点

如何使用库伯内特斯DNS豆荚?


在GKE上,库贝-dns在我的节点上运行,我可以看到docker容器。

我确实可以按名称访问服务,这对于负载平衡是完全合适的解决方案的所有这些应用程序都很好,但是如何使用DNS访问单个Pod呢?

我知道我可以在API中查找特定的pod,但是我需要自己更新host文件,并继续查看pod列表。DNS应该为我这样做,那么它是如何在pod中使用的呢?

库伯内特斯文档说DNS信息需要传递给kubelet,但据我所知,我无法访问GKE上的信息,所以它是不是在GKE上没有这样设置,还是有什么事情要做来激活它?

我的一些服务(特别是zoogger)自己知道其他节点,并尝试通过主机名(即pod名称)连接到它们,除非我自己更新host文件,否则会失败。我想为此使用集成的DNS服务。

关于如何做到这一点的任何指导将不胜感激。

谢啦


共3个答案

匿名用户

更新

根据文档,现在的格式是:

_my-port-name._my-port-protocol.my-svc.my-namespace. s vc.group.local

请参阅此处的相关文档:https://kubernetes.io/docs/concepts/services-networking/dns-pod-service/#pods

原答复:

截至目前,这实际上是不可能的…但是库伯内特斯团队正在研究这个问题。

看到这个问题:https://github.com/kubernetes/kubernetes/issues/13552

更新:

自09/2015起DNS可用于Pod见PR:https://github.com/kubernetes/kubernetes/pull/13759

简而言之:

这将以的形式提供pods dns

匿名用户

库伯内特斯statefulset支持关联服务名称,并通过服务名称定义pod dns名称。

比如你创建一个zk守护进程集和一个zk服务,那么zk守护进程集的第一个pod的dns名称是zk-0。$(servicename)。$(命名空间). svc.club.local

更多详情见:https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/

重要提示:服务必须是“无头”的,也就是说它的. spec.grousterIP必须是

匿名用户

库伯内特斯为StatefulSet的所有组件提供稳定的网络ID

考虑以下示例:

kind: Namespace
apiVersion: v1
metadata:
  name: mynamespace
---
apiVersion: v1
kind: Service
metadata:
  name: myservice
  namespace: mynamespace
  labels:
    app: myapp
spec:
  ports:
    - port: 80
      name: http
  type: ClusterIP
  selector:
    app: myapp
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: myapp
  namespace: mynamespace
spec:
  serviceName: myservice
  replicas: 2
  selector:
    matchLabels:
      app: myapp
  # ...

然后,您将在k8s集群中拥有以下可解析的DNS条目:

  • myservice. mynamesspace.svc.club.local用于通过myservice
  • myapppod之一进行负载平衡访问
  • myapp-0. myservice.mynamesspace.svc.club.local用于直接访问myappStatetefulSet
  • 的Pod 0
  • myapp-1. myservice.mynamesspace.svc.club.local用于直接访问myappStatetefulSet
  • 的Pod 1

文档:https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/#stable-network-id