Должен ли администратор применять HTTPS внутри сети Kubernetes или только для внешнего трафика (через входящий трафик)?

Должен ли администратор применять HTTPS внутри сети Kubernetes или только для внешнего трафика (через входящий трафик)?

В сценарии микросервисов каждый контейнер веб-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 with mTLS. Эта опция позволит вам направлять трафик с помощью заголовков HTTP, и вам не нужно будет вручную управлять сертификатами. Пожалуйста, проверьтеэтотЧтобы получить больше информации.

Поскольку Best Practises всегда стремятся быть максимально безопасными, всегда рекомендуется использовать безопасное соединение. Несмотря на это, в некоторых сценариях это просто не нужно.

решение2

Если ваш кластер работает в облаке и используетвнешний облачный балансировщик, ваш ingress и pods могут находиться на разных машинах или датацентрах. В этом случае вам действительно следует применить TLS от ingress до pods.

В любом случае балансировщик нагрузки и ваш кластер должны находиться в одном (желательно ограниченном) VPC.

решение3

Это также зависит от векторов атак, от которых вы защищаетесь.

Если вы обеспокоены тем, что кто-то может перехватывать трафик между вашими узлами Kubernetes, вы можете рассмотреть возможность использования сетевого плагина (CNI), поддерживающего шифрование, например WeaveNet, или поместить все свои узлы в сеть VPN с использованием Wireguard или OpenVPN.

Если вы хотите защитить службы в кластере друг от друга, вам следует рассмотреть что-то вроде Istio, которое шифрует трафик между модулями.

Связанный контент