【问题标题】:Does kubernetes have service discovery solution or I need to implement this myself?kubernetes 有服务发现解决方案还是我需要自己实现?
【发布时间】:2023-02-05 14:49:56
【问题描述】:

我为使用随机端口服务的每个微服务开发微服务(使用 nodejs),为此,我需要一个发现服务。

问题是 kubernetes 有服务发现解决方案还是我应该自己实现?

【问题讨论】:

  • 引用您所依赖的 kubernetes 文档的 URL。

标签: node.js docker kubernetes microservices


【解决方案1】:

简短的回答是肯定的,Kubernetes 确实有一个服务发现解决方案。 Kubernetes 有一个内置的 DNS 服务器,可用于发现服务。例如,如果您在 my-namespace 命名空间中有一个名为 my-service 的服务,您可以使用 http://my-service.my-namespace.svc.cluster.local 从任何 pod 访问它。

长话短说,Kubernetes 提供了两种不同类型的服务发现:

  1. 基于 DNS 的服务发现
  2. 基于环境变量的服务发现

    DNS-based service discovery

    基于 DNS 的服务发现是 Kubernetes 中最常见的服务发现机制。它基于属于 Kubernetes 集群的内置 DNS 服务器。 Kubernetes 自动为每个服务创建 DNS 记录。 DNS 记录以服务名称和服务名称空间命名。 DNS 记录存储在集群 DNS 服务器中,这是一种特殊类型的 DNS 服务器,是 Kubernetes 集群的一部分。集群 DNS 服务器自动配置为集群中所有 pod 的默认 DNS 服务器。如果您在 my-namespace 命名空间中有一个名为 my-service 的服务,您可以使用 http://my-service.my-namespace.svc.cluster.local 从任何 pod 访问它。

    Environment variable-based service discovery

    基于环境变量的服务发现是一种更高级的服务发现机制。它基于 Kubernetes 自动为每个服务创建环境变量这一事实。环境变量以服务名称和服务名称空间命名。环境变量存储在容器的环境中。如果您在 my-namespace 命名空间中有一个名为 my-service 的服务,您可以使用 MY_SERVICE_MY_NAMESPACE_SERVICE_HOSTMY_SERVICE_MY_NAMESPACE_SERVICE_PORT 环境变量从任何 pod 访问它。

    基于 DNS 的服务发现与基于环境变量的服务发现

    基于 DNS 的服务发现是 Kubernetes 中最常见的服务发现机制。它非常易于使用,并且受到所有 Kubernetes 客户端库的支持。基于环境变量的服务发现是一种更高级的服务发现机制。它更加灵活,并且受到所有 Kubernetes 客户端库的支持。基于环境变量的服务发现的主要缺点是它需要客户端应用程序了解 Kubernetes API。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-16
    • 2013-08-09
    • 2016-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-01
    相关资源
    最近更新 更多