【问题标题】:How can I expose my Hasura microservice on multiple ports?如何在多个端口上公开我的 Hasura 微服务?
【发布时间】:2023-03-29 23:44:01
【问题描述】:

我的微服务有多个容器,每个容器都需要访问不同的端口。如何使用 Hasura CLI 和项目配置文件在多个端口上公开此服务?

编辑:添加微服务的k8s.yaml(根据@iamnat 的要求) 假设我有两个容器,containerAcontainerB,我想分别在端口 63798000 上通过 HTTP 公开它们。

apiVersion: v1
items:
- apiVersion: extensions/v1beta1
  kind: Deployment
  metadata:
    creationTimestamp: null
    labels:
      app: www
      hasuraService: custom
    name: www
    namespace: '{{ cluster.metadata.namespaces.user }}'
  spec:
    replicas: 1
    strategy: {}
    template:
      metadata:
        creationTimestamp: null
        labels:
          app: www
      spec:
        containers:
        - name: containerA
          image: imageA
          ports:
          - containerPort: 6379
        - name: containerB
          image: imageB
          ports:
          - containerPort: 8000
        securityContext: {}
        terminationGracePeriodSeconds: 0
  status: {}
- apiVersion: v1
  kind: Service
  metadata:
    creationTimestamp: null
    labels:
      app: www
      hasuraService: custom
    name: www
    namespace: '{{ cluster.metadata.namespaces.user }}'
  spec:
    ports:
    - port: 6379
      name: containerA
      protocol: HTTP
      targetPort: 6379

    - port: 8000
      name: containerB
      protocol: HTTP
      targetPort: 8000

    selector:
      app: www
    type: ClusterIP
  status:
    loadBalancer: {}
kind: List
metadata: {}

【问题讨论】:

  • 您能否粘贴您当前的 k8s.yaml 以及您想要公开的其他端口的信息?
  • @iamnat:用k8s.yaml修改问题
  • 看起来您已经暴露了多个端口?或者当您说 expose 时,您的意思是您希望这些可以从集群外部公开访问?
  • @timothyclifford:是的。修改了k8s.yaml 以使用需要通过 HTTP 在不同端口公开的 2 个容器的通用示例。
  • 您有两个包含端口映射的容器,您看到的实际问题是什么?你有错误等吗?

标签: kubernetes hasura


【解决方案1】:

TL;DR: - 为您要公开的每个 HTTP 端点添加一个 API 网关路由[docs]


在 kubernetes 集群中,为您的 k8s 规范提供如下设置:

http://www.default:8000  -> containerA
http://www.default:6379  -> containerB

因此,您需要为conf/routes.yaml 中的每个 HTTP 路径创建一个路由。

www-a:
  /:
    upstreamService:
      name: www
      namespace: {{ cluster.metadata.namespaces.user }}
    upstreamServicePath: /
    upstreamServicePort: 8000
    corsPolicy: allow_all
www-b:
  /:
    upstreamService:
      name: www
      namespace: {{ cluster.metadata.namespaces.user }}
    upstreamServicePath: /
    upstreamServicePort: 6379
    corsPolicy: allow_all

这意味着,您将获得以下信息:

https://www-a.domain.com -> containerA
https://www-a.domain.com -> containerB

【讨论】:

    猜你喜欢
    • 2019-08-19
    • 2020-11-25
    • 1970-01-01
    • 2019-04-15
    • 2019-07-15
    • 2017-12-16
    • 2022-12-12
    • 1970-01-01
    • 2018-10-07
    相关资源
    最近更新 更多