Управление исходящим трафиком для приложений с использованием Istio Sidecar

Вопрос или проблема

Я хочу контролировать исходящий трафик по приложению в кластере AKS. На данный момент я смог ограничить исходящий доступ для рабочей нагрузки, используя Istio Sidecar и ServiceEntry. Вот 2 ресурса, которые я создал. Пример предназначен для доступа к сервису Azure API Management, который находится вне моего кластера. Учитывайте, что по умолчанию исходящий трафик разрешен для любого хоста, и я не могу контролировать внешние сервисы с помощью Network Policies.

ServiceEntry.yaml

apiVersion: networking.istio.io/v1beta1
kind: ServiceEntry
metadata:
  name: enternal-services
  namespace: busybox
spec:
  hosts:
  - "api.mydomain.com"  # Внешняя конечная точка API
  exportTo:
  - "."  # Экспорт только в текущее пространство имен
  location: MESH_EXTERNAL  # Внешний сервис
  ports:
  - number: 443
    name: https
    protocol: HTTPS  # Использовать протокол TLS для HTTPS-соединений
  outboundTrafficPolicy:
    mode: REGISTRY_ONLY

Sidecar.yaml

apiVersion: networking.istio.io/v1beta1
kind: Sidecar
metadata:
  name: allow-apim
  namespace: busybox
spec:
  workloadSelector:
    labels:
      app: curlbox
  egress:
  - port:
      number: 443
      protocol: HTTPS  # Соответствует протоколу из ServiceEntry
    hosts:
    - "./api.mydomain.com"  # Внешний сервис FQDN

Указанная выше конфигурация работает для ограничения доступа к сервисам, но я также не могу получить доступ к API Management. Я получаю ошибку SSL.

Обратите внимание, что я также пытался добавить */api.mydomain.com в конфигурацию Sidecar.

Ответ или решение

Управление исходящим трафиком для приложений с использованием Sidecar Istio в AKS

Введение

В современном мире облачных технологий контроль сетевого трафика является критически важной задачей для обеспечения безопасности и управления ресурсами. В вашей ситуации с управлением исходящим трафиком в кластере Azure Kubernetes Service (AKS) с использованием Istio вы уже сделали значительные шаги по ограничению доступа к внешним сервисам. Давайте проанализируем вашу текущую конфигурацию и определим, как разрешить доступ к Azure API Management, устранив возникшую ошибку SSL.

Текущая конфигурация

На данный момент вы создали два ключевых объекта: ServiceEntry и Sidecar. Рассмотрим их более детально:

ServiceEntry

apiVersion: networking.istio.io/v1beta1
kind: ServiceEntry
metadata:
  name: internal-services
  namespace: busybox
spec:
  hosts:
  - "api.mydomain.com"  # Внешняя конечная точка API
  exportTo:
  - "."  # Экспорт только в текущее пространство имен
  location: MESH_EXTERNAL  # Внешний сервис
  ports:
  - number: 443
    name: https
    protocol: HTTPS  # Использование протокола TLS для HTTPS
  outboundTrafficPolicy:
    mode: REGISTRY_ONLY

Sidecar

apiVersion: networking.istio.io/v1beta1
kind: Sidecar
metadata:
  name: allow-apim
  namespace: busybox
spec:
  workloadSelector:
    labels:
      app: curlbox
  egress:
  - port:
      number: 443
      protocol: HTTPS
    hosts:
    - "./api.mydomain.com"  # Внешний сервис FQDN

Проблема

Вы столкнулись с ошибкой SSL при попытке доступа к Azure API Management. Это может быть связано с несколькими возможными факторами, включая неправильные настройки в ServiceEntry или Sidecar.

Рекомендации по исправлению конфигурации

  1. Проверьте настройки ServiceEntry:
    Убедитесь, что ваш ServiceEntry настроен для поддержки полного доменного имени (FQDN). Вероятно, вы хотите использовать его в формате без префикса ./ для доступа. Попробуйте изменить часть конфигурации следующим образом:

    hosts:
    - "api.mydomain.com"  # Внешняя конечная точка API
  2. Проверьте настройки Sidecar:
    В вашем Sidecar проверьте, что hosts содержит корректное имя:

    hosts:
    - "api.mydomain.com"  # Внешний сервис FQDN
  3. Добавление порта 80 для HTTP:
    Если сервер API Management поддерживает HTTP, вы можете также добавить еще один порт для незащищенного трафика:

    - port:
       number: 80
       protocol: HTTP
     hosts:
     - "api.mydomain.com"
  4. Проверка CA и сертификатов:
    Убедитесь, что ваш Istio настроен на доверие к сертификатам, используемым Azure API Management. Возможно, понадобится добавить соответствующие корневые сертификаты в набор сертификатов источника.

  5. Логи и отладка:
    Используйте инструменты вроде kubectl logs и istioctl proxy-config для проверки того, как настроен прокси Istio. Это поможет выявить дополнительные проблемы.

Заключение

Эффективное управление исходящим трафиком в вашем АКС-кластере с использованием Istio является важным шагом на пути к обеспечению защищённости и контроля приложений. Ваша текущая конфигурация делает большую работу по ограничению доступа, однако, настройки для доступа к Azure API Management требуют дополнительных корректировок. Следуя предложенным шагам, вы сможете устранить проблемы с SSL и успешно реализовать нужный контроль за трафиком.

Оцените материал
Добавить комментарий

Капча загружается...