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