Использование Istio для блокировки входящих подключений от ЛЮБОЙ к сервису

Пытаемся найти лучший способ заблокировать любое подключение из Интернета к сервису k8s с помощью Istio.

Что было бы лучшим выбором из политики Istio?

Смеситель - отказы или списки. Пилот - правила маршрута - например, ввод сбоя прерывания (400) ИЛИ политика назначения - например, разрыв цепи (макс. Соединение 0 ???)

Пробовал все вышеперечисленное, но ничего не работает, и некоторые из них не очень интуитивно понятны в настройке (и плохо документированы).

Оцените, если будет приложен рабочий пример

Ниже приведен пример Внедрение политики ошибок HTTP.

destination: "ratings.default.svc.cluster.local"
route:
- tags:
    version:
httpFault:
  abort:
    percent: 100
    httpStatus: 400
httpStatus: 400

Сначала Istio запрашивает тип:

Ошибка: Istio не имеет типа конфигурации, это политика назначения, правило входа, правило маршрута.

После добавления типа вручную:

type: route-rule
destination: "ratings.default.svc.cluster.local"
route:
- tags:
    version:
httpFault:
  abort:
    percent: 100
    httpStatus: 400

О методе кричит:

I0914 17: 44: 32.417839 1003 request.go: 991] Тело ответа: 405: Метод не разрешен Ошибка: сервер не разрешает этот метод для запрошенного ресурса

Спасибо


person Zvika    schedule 14.09.2017    source источник


Ответы (4)


Если вы просто пытаетесь заблокировать внешний трафик к своей службе, правила маршрутизации (внедрение ошибок) - неправильный путь. Вместо этого вы должны заблокировать его, не открывая его при входе. https://istio.io/v-0.1/docs/tasks/ingress.html

Тем не менее, причина, по которой вы получали ошибки при попытке установить правило маршрутизации, заключается в том, что ваш формат yaml неправильный. Примерно это то, что ожидает команда istioctl:

type: route-rule
name: ratings-block
spec:
  destination: "ratings.default.svc.cluster.local"
  route:
  - tags:
      version: v1
  httpFault:
    abort:
      percent: 100
      httpStatus: 400

См. Примеры здесь: https://istio.io/v-0.1/docs/tasks/request-routing.html

person Frank B    schedule 15.09.2017

Самый простой способ - просто включить istio auth и запретить вход в вашу конфигурацию.

Таким образом, вы получаете 2 уровня защиты:

  1. ваши сервисы не маршрутизируются (нет внешних IP-адресов)

а также

  1. даже если интернет-трафик каким-то образом удастся попасть в ваши службы, трафик будет отклонен, поскольку он не предоставляет CERT службы istio / подписанный вашим istio CA
person Laurent Demailly    schedule 14.09.2017
comment
Оба вышеуказанных подхода подходят для определенных сред или настроек. В настоящее время я хочу применить специальную технику для применения блока на лету с использованием уже развернутой среды, которая не позволит легко добавлять новые функции (если они еще не развернуты). - person Zvika; 17.09.2017
comment
Подход Istio auth будет идеальным, если вы знаете, кто ваши клиенты, или для использования активации службы. Если вы хотите широко раскрыть свой сервис, тогда auth не подойдет. - person Zvika; 17.09.2017
comment
Чтобы широко раскрыть свой сервис, вы должны добавить вход для тех, которые вы хотите предоставить, и настроить для него правила микшера Istio, чтобы ограничить доступ. - person Laurent Demailly; 23.09.2017

Выяснилось, что правила маршрутизации Istio применяются только тогда, когда две конечные точки подключения (клиентский модуль и серверный модуль) оснащены Envoys.

Это само по себе требует дальнейшего изучения, поскольку в этом нет никакого смысла.

Трафик, приходящий извне кластера, действительно должен контролироваться входящим потоком.

person Zvika    schedule 17.09.2017

Istio имеет концепцию внутренней / внешней сетки. Каждая служба внутри сетки имеет дополнительный прокси-сервер, и их трафик подчиняется правилам маршрутизации. Все, что приходит извне меша, должно проходить через Ingress. Сам Ingress является сетевым сервисом (прокси).

person Joy Zhang    schedule 18.09.2017