В сценарии с микросервисами каждый контейнер web-api должен обслуживать себя через HTTPS, или можно ли внутренне работать через HTTP и иметь все входы, настроенные с помощью сертификатов и перенаправления на порт 80 контейнеров?
Я думаю, что самый простой подход - защитить только внешний трафик, потому что для настройки Asp.Net Core WebAPI для обслуживания себя (пустельга) через HTTPS (например) вам необходимо смонтировать сертификат в том и предоставить пароль сертификата. Это немного сложно.
Какая лучшая практика?
Это зависит от требований и ресурсов, если у вас On-Prem или baremetal и т. Д.
Нет требований к защите трафика
Если нет требований относительно защиты клиентского трафика внутри кластера, вы можете завершить работу клиента. SSL
подключение на ingress-controller
и использовать HTTP
между стручками.
Требования безопасности
Если есть необходимость защитить клиентский трафик к назначенному модулю, это можно получить двумя способами.
L3 LoadBalancer
с участием NodePort, настроенный с SSL-соединение на Ingress
.SSL
но не обязательно доставлять SSL
прямо к назначенному Pod
, было бы проще реализовать это, настроив Istio Сетка с mTLS
. Эта опция позволит вам маршрутизировать трафик с использованием заголовков HTTP, и вам не нужно управлять сертификатами вручную. пожалуйста, проверьте этот Чтобы получить больше информации.Поскольку Best Practices всегда стремятся быть максимально безопасными, всегда рекомендуется использовать безопасное соединение. Несмотря на это, некоторым сценариям это просто не нужно.
Это также зависит от векторов атак, от которых вы защищаете.
Если вас беспокоит, что кто-то может обнюхать трафик между вашими узлами Kubernetes, вы можете рассмотреть возможность использования сетевого плагина (CNI), который поддерживает шифрование, например WeaveNet, или вы можете разместить все свои узлы в сети VPN с помощью Wireguard или OpenVPN.
Если вы хотите защитить службы в кластере друг от друга, вам следует подумать о чем-то вроде Istio, которое шифрует трафик между модулями.
Если ваш кластер работает в облаке и использует балансировщик внешнего облака, ваш вход и модули могут находиться на разных компьютерах или в центрах обработки данных. В этом случае вам действительно следует принудительно применять TLS от входа к модулям.
В любом случае балансировщик нагрузки и ваш кластер должны находиться в одном (надеюсь, ограниченном) VPC.