Невозможно подключиться к приложению на EKS через Istio с deny-all GlobalNetworkPolicy - PullRequest
0 голосов
/ 13 марта 2020

Моя настройка: Запуск EKS 1.14 с Calico и Istio 1.5.

Попытка заставить образец bookinfo работать с указанными c NetworkPolicies.

Я применил GlobalNetworkPolicy, который запрещает все трафик c:

apiVersion: projectcalico.org/v3
kind: GlobalNetworkPolicy
metadata:
  name: default-deny
spec:
  selector: all()
  types:
  - Ingress
  - Egress

Я также добавил GlobalNetworkPolicy для Istio в пространство имен и трафик внутри имен c:

apiVersion: projectcalico.org/v3
kind: GlobalNetworkPolicy
metadata:
  name: allow-istio-system-to-ns
spec:
  selector: all()
  namespaceSelector: istio-injection == 'enabled'
  types:
  - Ingress
  - Egress
  ingress:
  - action: Allow
    source:
      selector: all()
      namespaceSelector: projectcalico.org/namespace == 'istio-system'
  - action: Allow
    source:
      selector: all()
      namespaceSelector: istio-injection == 'enabled'
  egress:
  - action: Allow

и NetworkPolicy, позволяющий входить и выходить в istio-системе

apiVersion: projectcalico.org/v3
kind: NetworkPolicy
metadata:
  name: allow-istio-system-all
  namespace: istio-system
spec:
  selector: all()
  types:
  - Ingress
  - Egress
  ingress:
  - action: Allow 
  egress:
  - action: Allow

И NetworkPolicy разрешает трафик c на входной шлюз на портах 80 и 443. Я знаю, что это избыточно, но я надеялся сократить предыдущий только до необходимого входа.

apiVersion: projectcalico.org/v3
kind: NetworkPolicy
metadata:
  name: allow-istio-ingress-on-80-443
  namespace: istio-system
spec:
  selector: app == 'istio-ingressgateway'
  ingress:
    - action: Allow
      protocol: TCP
      destination:
        ports:
          - 80
          - 443

Также некоторые другие, не связанные NetworkPolicies (доступ к kube-dns, metrics-server). Развертывание bookinfo работает с политиками и без них, а также с развертыванием шлюза.

Соединение между компонентами работает (я могу запустить c в один модуль и подключиться к другим). Но когда я пытаюсь получить доступ к странице продукта через шлюз с политиками, я ничего не получаю, вместо HTML, который я получаю без политик.

Я пропускаю трафик c что должно быть разрешено? Должны ли у меня быть политики для мастер-узлов или для балансировщика нагрузки где-то еще?

Редактировать: Если я разрешу все входы в istio-систему и в пространство имен, это работает. Так что я думаю, что просто пропускаю какой-то другой вход из пространства имен, есть ли способ ограничить его только балансировкой нагрузки?

Ответы [ 2 ]

0 голосов
/ 16 марта 2020

Почему-то это работает, когда я заменяю projectcalico.org/namespace == 'istio-system' на этикетку из istio-system (например, istio-injection=disabled).

apiVersion: projectcalico.org/v3
kind: GlobalNetworkPolicy
metadata:
  name: allow-istio-system-to-ns
spec:
  selector: all()
  namespaceSelector: istio-injection == 'enabled'
  types:
  - Ingress
  - Egress
  ingress:
  - action: Allow
    source:
      selector: all()
      namespaceSelector: istio-injection == 'disabled'  
  - action: Allow
    source:
      selector: all()
      namespaceSelector: istio-injection == 'enabled'
  egress:
  - action: Allow
0 голосов
/ 13 марта 2020

Во-первых, в вашем allow-istio-system-to-ns yaml есть опечатка:

      namespaceSelector: projectcalico.org/namespace == 'istio-system

В конце строки должен быть еще один '.


Во-вторых Это может быть вызвано изменениями политики и микшера в версии istio 1.5.

Согласно документации Istio :

Политика микшера устарела в Istio 1.5 и не рекомендуется для производственного использования.

В документации istio есть руководство , позволяющее включить устаревшие функции:

Для существующего Istio me sh

  1. Проверьте статус применения политики для вас sh.
$ kubectl -n istio-system get cm istio -o jsonpath="{@.data.mesh}" | grep disablePolicyChecks
disablePolicyChecks: true

Если включено применение политик (disablePolicyChecks неверно), дальнейших действий не требуется.

Обновите конфигурацию istio, чтобы включить проверки политики.

Выполните следующую команду из каталога root Istio:

$ istioctl manifest apply --set values.global.disablePolicyChecks=false --set values.pilot.policy.enabled=true
configuration "istio" replaced
Проверьте, что принудительное применение политики теперь включено.
$ kubectl -n istio-system get cm istio -o jsonpath="{@.data.mesh}" | grep disablePolicyChecks
disablePolicyChecks: false

Обратите внимание, что в документации ситца говорится, что требуются следующие версии istio:

Istio v1.0, v1.1, v1.2 или v1.3

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

...