Частные пути в публичном API с Kubernetes - PullRequest
0 голосов
/ 03 апреля 2019

У нас есть микросервисная архитектура на основе Kubernetes в Amazon EKS с послом в качестве API Gateway.

У нас есть 2 посла: 1 государственный и 1 частный.Таким образом, у нас есть сервисы, которые доступны только для сервисов в кластере или VPN, и у нас есть сервисы, которые являются общедоступными.

Нам необходимо сделать приватными некоторые пути URL в общедоступных сервисах.Например, у нас есть общедоступный API, который доступен в api.company.com, и мы хотим оставить все пути открытыми, например api.company.com/createuser, api.company.com/login и т. Д., Но для других путей мы хотим сделать их, например, закрытыми.: api.company.com/swagger.html.

Мы знаем, что могли бы включить аутентификацию для этих путей в API, но мы ищем решение без аутентификации.

Пример того, как мы конфигурируем сервис K8s с послом для публичных сервисов:

apiVersion: v1
kind: Service
metadata:
  annotations:
    getambassador.io/config: |
      ---
      apiVersion: ambassador/v0
      kind:  Mapping
      name:  backends_mapping
      prefix: /
      ambassador_id: ambassador-public
      service: backends.svc:8080
      host: api.mycompany.com
  labels:
    app: backends
  name: backends
  namespace: svc
spec:
  ports:
  - name: http-backends
    port: 8080
    protocol: TCP
    targetPort: http-api
  selector:
    app: backends
  type: ClusterIP

Ответы [ 2 ]

1 голос
/ 03 апреля 2019

Не уверен, что вы подразумеваете под без аутентификации.Вам понадобится какая-то проверка, чтобы обслуживать внутренний контент.

Один из подходов для достижения этой цели может быть (обратите внимание, это обзор высокого уровня).

Вы можете сделать службу частной, не открывать эту службу напрямую.

Префикс всех ваших внутренних маршрутов с префиксом скажем /internal/ или /private/.
То есть api.company.com/swagger.html становитсяapi.company.com/internal/swagger.html

Вы можете создать балансировщик нагрузки, который указывает на это промежуточное ПО.Промежуточное программное обеспечение (государственная служба) будет перехватывать все запросы.Я думаю, что Nginx можно использовать здесь.Если запрос имеет /internal/ путь, проверьте, удовлетворяет ли он условию (источник, внутренняя сеть и т. Д.).

Если проверка прошла, перенаправьте на частную службу.Если проверка не пройдена, верните 403 запрещено или любой другой подходящий код ответа.

0 голосов
/ 03 апреля 2019

Cilium может делать то, что вы хотите: http://docs.cilium.io/en/stable/policy/language/#http

В основном вы можете указать сетевые политики L7, которые будут разрешать доступ только к некоторым из ваших путей API из определенных модулей.

Проект Ciliumстраница: https://cilium.io/ Пример политики уровня 7: http://docs.cilium.io/en/stable/policy/language/#http Руководство по установке EKS: http://docs.cilium.io/en/v1.4/gettingstarted/k8s-install-eks/?highlight=eks

Отказ от ответственности: Я являюсь частью команды, которая разрабатывает Cilium.

...