Как я могу выставить свой микросервис Hasura на несколько портов?

В моем микросервисе есть несколько контейнеров, каждому из которых требуется доступ к отдельному порту. Как мне предоставить эту услугу на нескольких портах с помощью интерфейса командной строки Hasura и файлов конфигурации проекта?

Редактировать: Добавление микросервиса k8s.yaml (по запросу @iamnat) Допустим, у меня есть два контейнера, containerA а также containerB, что я хочу выставить через HTTP на портах 6379 а также 8000 соответственно.

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: {}

1 ответ

Решение

TL;DR: - добавить маршрут шлюза API для каждой конечной точки HTTP, которую вы хотите предоставить [docs]


Внутри кластера kubernetes укажите свою спецификацию k8s так будет выглядеть ваша установка:

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

Таким образом, вам нужно создать маршрут для каждого из этих путей HTTP в conf/routes.yaml,

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
Другие вопросы по тегам