Вопрос или проблема
Я хочу контролировать исходящий трафик по приложению в кластере 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
.
Рекомендации по исправлению конфигурации
-
Проверьте настройки
ServiceEntry
:
Убедитесь, что вашServiceEntry
настроен для поддержки полного доменного имени (FQDN). Вероятно, вы хотите использовать его в формате без префикса./
для доступа. Попробуйте изменить часть конфигурации следующим образом:hosts: - "api.mydomain.com" # Внешняя конечная точка API
-
Проверьте настройки
Sidecar
:
В вашемSidecar
проверьте, чтоhosts
содержит корректное имя:hosts: - "api.mydomain.com" # Внешний сервис FQDN
-
Добавление порта 80 для HTTP:
Если сервер API Management поддерживает HTTP, вы можете также добавить еще один порт для незащищенного трафика:- port: number: 80 protocol: HTTP hosts: - "api.mydomain.com"
-
Проверка CA и сертификатов:
Убедитесь, что ваш Istio настроен на доверие к сертификатам, используемым Azure API Management. Возможно, понадобится добавить соответствующие корневые сертификаты в набор сертификатов источника. -
Логи и отладка:
Используйте инструменты вродеkubectl logs
иistioctl proxy-config
для проверки того, как настроен прокси Istio. Это поможет выявить дополнительные проблемы.
Заключение
Эффективное управление исходящим трафиком в вашем АКС-кластере с использованием Istio является важным шагом на пути к обеспечению защищённости и контроля приложений. Ваша текущая конфигурация делает большую работу по ограничению доступа, однако, настройки для доступа к Azure API Management требуют дополнительных корректировок. Следуя предложенным шагам, вы сможете устранить проблемы с SSL и успешно реализовать нужный контроль за трафиком.