gpt4 book ai didi

kubernetes - 使用Helm和Kubernetes的微服务结构

转载 作者:行者123 更新时间:2023-12-02 12:12:57 26 4
gpt4 key购买 nike

我们有几个微服务(基于NodeJS的应用程序)需要彼此通信,其中两个使用Redis和PostgreSQL。以下是我的微服务的名称。他们每个人都有自己的SCM存储库和Helm Chart.Helm版本是3.0.1。我们有两个环境,每个环境有两个value.yaml,每个集群也有三个节点。

首先,在最终用户执行操作之后,UI服务的触发将比后端触发。根据最终用户的请求,后端服务需要通信任何服务,例如Market,Auth和API。在某些情况下,API和市场微服务也需要与Auth微服务进行通信。

  • UI->
  • 后端
  • 市场->使用postgreSQL
  • Auth->使用Redis
  • API

  • 所以我的问题是
  • 在相互之间通信微服务时,我们应该注意些什么?这个my-svc-namespace.svc.cluster.local是否足以提供给开发人员,还是我们也应该在每个 pods 中指定ENV?
  • 我们的微服务是NodeJS应用程序。如何开发。将在应用程序源代码中处理此问题?如果第一个问题的答案是肯定的,他们是否使用此服务名称?
  • 我们想通过环境使用主机通过入口公开我们的应用程序吗?我猜应该只为UI微服务启用入口,对吗?
  • 测试每种服务可以相互通信的最佳方法是什么?

  • kubectl get svc --all-namespaces

    NAMESPACE NAME TYPE

    database my-postgres-postgresql-helm ClusterIP
    dev my-ui-dev ClusterIP
    dev my-backend-dev ClusterIP
    dev my-auth-dev ClusterIP
    dev my-api-dev ClusterIP
    dev my-market-dev ClusterIP
    dev redis-master ClusterIP
    ingress ingress-traefik NodePort

    最佳答案

    在K8S中执行服务发现的两种方法

    在Kubernetes集群中有两种执行通信(服务发现)的方法。

  • Environment variable
  • DNS

  • DNS是在群集内实现服务发现的最简单方法。
    并且它不需要为每个 pods 额外设置任何ENV变量。
    最简单的说,可以通过其服务名称访问相同 namespace 中的服务。例如 http://my-api-dev:PORT可用于 namespace dev中的所有Pod。

    标准应用程序名称和K8s服务名称

    作为实践,您可以为每个应用程序指定一个标准名称,例如。 my-uimy-backendmy-api等。并使用相同的名称连接到应用程序。
    这种做法甚至可以在开发人员环境中本地应用测试,在 /etc/host中输入如下:
    127.0.0.1 my-ui my-backend my-api

    (以上与k8s无关,只是在本地环境中使用名称进行应用程序通信的一种做法)

    另外,在k8s上,您可以将服务名称分配为相同的应用程序名称(请避免使用 -dev这样的后缀作为服务名称,以反射(reflect)环境(dev,test,prod等),而不是为此使用 namespace 或单独的集群) 。因此,可以在每个应用程序的配置文件上使用目标服务端点配置其服务名称。

    入口用于具有外部访问权限的服务

    仅应为需要外部访问的服务启用入口。

    自定义运行状况检查端点

    同样,最好进行一些自定义运行状况检查,以验证所有依赖的应用程序是否正常运行,这也将验证应用程序的通信是否正常。

    关于kubernetes - 使用Helm和Kubernetes的微服务结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60595526/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com