17

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

我确实可以通过名称访问服务,这对于负载平衡是非常合适的解决方案的所有这些应用程序来说非常有用,但是我将如何使用 DNS 来访问单个 pod?

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

Kubernetes 文档说 DNS 信息需要传递给 kubelet,但我无法访问我所知道的 GKE 上的信息,所以它只是没有在 GKE 上设置这种方式,还是需要做些什么来激活它?

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

任何有关如何执行此操作的指导将不胜感激。

谢谢

4

3 回答 3

10

更新

根据文档,格式现在是:

_my-port-name._my-port-protocol.my-svc.my-namespace.svc.cluster.local

在此处查看相关文档: https ://kubernetes.io/docs/concepts/services-networking/dns-pod-service/#pods

原始答案:

截至目前,这实际上是不可能的……但 Kubernetes 团队正在研究它。

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

更新

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

简而言之:

这将以 Current 的形式提供 Pod dns <podIP>.<namespace>.pod.<clusterSuffix>可以禁用,但对所有 Pod 都打开或关闭。

于 2015-09-05T05:06:32.030 回答
3

Kubernetes statefulset 支持关联一个服务名,通过服务名定义 pod dns 名。

比如你创建了一个zk daemonset,和一个zk service,那么zk daemonset的第一个pod的dns名称就是zk-0.$(namespace).svc.cluster.local

更多细节见: https ://kubernetes.io/docs/concepts/workloads/controllers/statefulset/

重要提示:该服务必须是“<a href="https://kubernetes.io/docs/concepts/services-networking/service/#headless-services" rel="nofollow noreferrer">headless”才能工作,即是不是.spec.clusterIP 必须None

于 2017-10-09T02:29:29.600 回答
0

Kubernetes 为所有组件提供稳定的网络 IDStatefulSet

考虑以下示例:

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.mynamespace.svc.cluster.local用于通过负载平衡访问其中一个myapppodmyservice
  • myapp-0.myservice.mynamespace.svc.cluster.local用于直接访问 Pod 0myapp StatetefulSet
  • myapp-1.myservice.mynamespace.svc.cluster.local用于直接访问 Pod 1myapp StatetefulSet

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

于 2022-02-23T18:58:01.873 回答