Сетевая политика мультикластера Istio - PullRequest
0 голосов
/ 05 февраля 2020

У меня есть ISTIO на двух моих кластерах kubernetes в качестве реплицированной плоскости управления. В моем случае некоторые сетевые политики ограничивают доступ к объектам с пометкой, но они работают только на одном кластере.

Как я могу реализовать ограничение домена и услуг между двумя кластерами на Istio? Есть ли у вас какие-либо предложения?

Спасибо

Пример сетевой политики:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: policy-new
  namespace: point-1
spec:
  ingress:
  - from:
    - podSelector:
        matchLabels:
          run: app2
  podSelector:
    matchLabels:
      run: app

1 Ответ

0 голосов
/ 05 февраля 2020

Kubernetes NetworkPolicy может иметь ограниченное использование для мультикластера.

Лучше использовать Istio's AuthorizationPolicy. Согласно документации istio:

Чтобы настроить политику авторизации Istio, вы создаете AuthorizationPolicy ресурс .

Политика авторизации включает в себя селектор и список правил. Селектор указывает цель , к которой применяется политика, а в правилах указывается , кому разрешено делать что при каких условиях . В частности:

  • target относится к разделу selector в AuthorizationPolicy.
  • , кто относится к from раздел в rule из AuthorizationPolicy.
  • что относится к разделу to в rule из AuthorizationPolicy.
  • условия относится к разделу when в rule AuthorizationPolicy.

Каждое правило имеет следующие стандартные поля:

  • from: список источников.
  • to: список операций.
  • when: Список пользовательских условий.

В следующем примере показан AuthorizationPolicy, который позволяет двум источникам (учетная запись службы cluster.local/ns/default/sa/sleep и пространство имен dev) получать доступ к рабочим нагрузкам с метками app: httpbin и version: v1 в пространстве имен foo при отправке запроса с допустимым токеном JWT.

apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:
 name: httpbin
 namespace: foo
spec:
 selector:
   matchLabels:
     app: httpbin
     version: v1
 rules:
 - from:
   - source:
       principals: ["cluster.local/ns/default/sa/sleep"]
   - source:
       namespaces: ["dev"]
   to:
   - operation:
       methods: ["GET"]
   when:
   - key: request.auth.claims[iss]
     values: ["https://accounts.google.com"]

Также я рекомендую прочитать this и this сообщений в блоге istio, которые охватывают темы многокластерной безопасности Кроме того, Admiral проект с открытым исходным кодом в рамках istio-экосистемы, который обеспечивает автоматическое c создание конфигурации, синхронизацию и обнаружение служб для мультикластерной службы Istio me sh.

Ambassador можно настроить заблокировать связь, за исключением трафика c, который мы определяем с использованием объектов ServiceEntry, Dependency и GlobalTrafficPolicy.

Надеюсь, это поможет.

...