Создать брандмауэр на GCP через istio

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

Istio creatd istio-ingressgateway service как 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 ответ


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


Тем не мение,

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

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

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

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

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

$ 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 ]
---
  1. Попробуйте перейти на страницу продукта Bookinfo по адресу http://$GATEWAY_URL/productpage и убедитесь, что вы получаете сообщение об ошибке, похожее на: PERMISSION_DENIED:staticversion.istio-system:<your mesh source ip> is not whitelisted

Пример в документации содержит раздел « Перед началом работы», поэтому убедитесь, что он соответствует требованиям для активации политик .

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

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

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

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

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


Есть идеи?

10000