首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用Docker Compose或Kubernetes时,动态服务发现是如何工作的?

使用Docker Compose或Kubernetes时,动态服务发现是如何工作的?
EN

Stack Overflow用户
提问于 2018-09-10 15:12:14
回答 1查看 168关注 0票数 0

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

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

  1. /api/v1/users)。

如果我使用Docker Compose或Kubernetes,如果有请求发送到/api/v1/messages应用编程接口端点,我的网关服务如何知道它应该转发到哪个服务?

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

提前感谢!

EN

回答 1

Stack Overflow用户

发布于 2018-09-11 08:36:31

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

  1. 使用您的docker映像创建您的微服务部署/工作负载,
  2. Create服务指向这些服务入口,使用指向服务

的基于路径的规则

以下是示例清单/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:

第2步:

第3步:

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52252743

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档