Создать брандмауэр на GCP через istio - PullRequest
0 голосов
/ 12 февраля 2020

Моя конфигурация: кластер GKE v. 1.15.7-gke.23 istio: 1.4.3

Служба Istio creatd istio-ingressgateway как Loadbalacner с правилом брандмауэра по умолчанию:

  • Тип: Ingress
  • Цели: виртуальные машины в кластере GKE
  • Фильтры: 0.0.0.0/0
  • Протоколы / порты: tcp: 15020, tcp: 80, tcp: 443, tcp: 15029, tcp: 15030, tcp: 15031, tcp: 15032, tcp: 15443

Моя цель - обновить Фильтры по правилу, разрешить доступ к конечная точка только из списка разрешенных IP-адресов.

Можно ли это реализовать через istio?

1 Ответ

1 голос
/ 12 февраля 2020

AFAIK Невозможно повлиять на правила по умолчанию для istio-ingressgateway Loadbalancer на брандмауэре GCP только из конфигурации istio.


Однако,

Этот тип фильтрации может быть достигнут с использование политики istio. Так что запросы достигнут istio-ingressgateway, но затем будут отклонены политиками, если IP-адрес не был внесен в белый список.

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

Istio поддерживает белые списки и черные списки на основе IP-адреса. Вы можете настроить Istio на прием или отклонение запросов от указанного c IP-адреса или su bnet.

  1. Убедитесь, что вы можете получить доступ к Bookinfo productpage, найденному в http://$GATEWAY_URL/productpage , Вы не сможете получить к нему доступ, если примените приведенные ниже правила.

  2. Примените конфигурацию для адаптера list , который занесен в белые списки su bnet "10.57.0.0\16" на входном шлюзе:

$ kubectl apply -f https://raw.githubusercontent.com/istio/istio/release-1.4/samples/bookinfo/policy/mixer-rule-deny-ip.yaml)

Содержимое mixer-rule-deny-ip.yaml:

apiVersion: config.istio.io/v1alpha2
kind: handler
metadata:
  name: whitelistip
spec:
  compiledAdapter: listchecker
  params:
    # providerUrl: ordinarily black and white lists are maintained
    # externally and fetched asynchronously using the providerUrl.
    overrides: ["10.57.0.0/16"]  # overrides provide a static list
    blacklist: false
    entryType: IP_ADDRESSES
---
apiVersion: config.istio.io/v1alpha2
kind: instance
metadata:
  name: sourceip
spec:
  compiledTemplate: listentry
  params:
    value: source.ip | ip("0.0.0.0")
---
apiVersion: config.istio.io/v1alpha2
kind: rule
metadata:
  name: checkip
spec:
  match: source.labels["istio"] == "ingressgateway"
  actions:
  - handler: whitelistip
    instances: [ sourceip ]
---
Попробуйте получить доступ к Bookinfo productpage на http://$GATEWAY_URL/productpage и убедитесь, что вы получаете сообщение об ошибке, похожее на: PERMISSION_DENIED:staticversion.istio-system:<your mesh source ip> is not whitelisted

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

Редактировать:

Чтобы уточнить,

Правила межсетевого экрана Istio и GCP работают на разных уровнях. Istio включен только в me sh, то есть везде, где вам вводят коляску.

Чтобы заставить istio-ingressgateway работать, GCE предоставляет балансировщик сетевой нагрузки, который имеет некоторые предварительно настроенные правила, полностью независимые от Istio me sh.

Итак, в основном: Брандмауэр GCE правила будут влиять только на балансировщик сетевой нагрузки, подключенный к кластеру, чтобы разрешить трафик c в Istio me sh, а правила фильтрации в Istio будут работать только во всех модулях / службах / конечных точках, которые находятся в me sh.

...