gpt4 book ai didi

docker - 使用Docker Compose或Kubernetes时动态服务发现如何工作?

转载 作者:行者123 更新时间:2023-12-02 21:14:16 24 4
gpt4 key购买 nike

假设我正在创建一个具有微服务架构的聊天应用程序。我有2个服务:

  • 网关服务:负责用户身份验证(API端点/api/v1/users),并将请求路由到适当的服务。
  • 消息服务:负责创建,检索,更新和删除消息(API端点/api/v1/messages)。

  • 如果我使用Docker Compose或Kubernetes,如果有请求发送到 /api/v1/messages API端点,我的网关服务如何知道将其转发给哪个服务?

    我曾经编写自己的动态服务发现中间件( https://github.com/zicodeng/tahc-z/blob/master/servers/gateway/handlers/dsd.go)。我的想法是我向服务负责的API端点预注册服务。我的网关服务依赖于请求资源路径来决定应将此请求转发到哪个服务。但是,如何使用Docker Compose或Kubernetes做到这一点?我仍然需要保留自己的动态服务发现中间件版本吗?

    提前致谢!

    最佳答案

    如果您使用的是Kubernetes,请执行以下高级步骤:

  • 使用docker镜像创建微服务部署/工作负载
  • 创建指向这些部署的服务
  • 使用指向服务
  • 的基于路径的规则创建Ingress

    这是示例 list / yaml文件:(根据需要更改docker镜像,端口等)
    apiVersion: v1
    kind: Service
    metadata:
    name: svc-gateway
    spec:
    ports:
    - port: 80
    selector:
    app: gateway
    ---
    apiVersion: v1
    kind: Service
    metadata:
    name: svc-messaging
    spec:
    ports:
    - port: 80
    selector:
    app: messaging
    ---
    apiVersion: extensions/v1beta1
    kind: Deployment
    metadata:
    name: deployment-gateway
    spec:
    replicas: 1
    template:
    metadata:
    labels:
    app: gateway
    spec:
    containers:
    - name: gateway
    image: gateway/image:v1.0
    ports:
    - containerPort: 80
    ---
    apiVersion: extensions/v1beta1
    kind: Deployment
    metadata:
    name: deployment-messaging
    spec:
    replicas: 1
    template:
    metadata:
    labels:
    app: messaging
    spec:
    containers:
    - name: messaging
    image: messaging/image:v1.0
    ports:
    - containerPort: 80
    ---
    apiVersion: extensions/v1beta1
    kind: Ingress
    metadata:
    name: ingress-for-chat-application
    spec:
    rules:
    - host: chat.example.com
    http:
    paths:
    - backend:
    serviceName: svc-gateway
    servicePort: 80
    path: /api/v1/users
    - backend:
    serviceName: svc-messaging
    servicePort: 80
    path: /api/v1/messages

    如果您有其他容器在同一命名空间中运行,并且希望与这些服务进行通信,则可以直接使用它们的服务名称。

    例如: curl http://svc-messagingcurl http://svc-gateway
    您不需要运行自己的服务发现,Kubernetes会照顾好它!

    一些视觉效果:

    步骤1:
    deployments

    第2步:
    services

    第三步:
    ingress

    关于docker - 使用Docker Compose或Kubernetes时动态服务发现如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52252743/

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