Приложения могут быть разделены простыми именами и метками или пространствами имен. Разделение может go еще больше ограничить узлы, на которых может работать экземпляр, или даже запускать отдельные кластеры.
Сетевые политики могут применяться поверх развертывания для улучшения изоляции сети. Это необходимо для эмуляции настройки docker compose «сетевой мост на экземпляр».
«Изолированный» может означать много вещей, хотя существует различных слоев , где термин могут применяться различными способами.
Именование
Многие экземпляры развертывания могут выполняться в кластере, если именование каждого ресурса kubernetes не соответствует sh. Это включает в себя примененные метки (и иногда аннотации), которые используются для выбора или составления отчетов о приложениях, чтобы вы могли однозначно идентифицировать ресурсы клиентов.
kubectl create -f deployment-customer1.yaml
kubectl create -f deployment-customer2.yaml
С этим типом именования проще управлять с помощью механизма развертывания, такого как helm . Helm "диаграммы" описывает выпуск и построен с базовой концепцией переменной "имя выпуска", поэтому шаблоны yaml могут полагаться на переменные . Средний выпуск руля:
helm install -f customer1-values.yaml customer1-app me/my-app-chart
helm install -f customer2-values.yaml customer2-app me/my-app-chart
Пространства имен
A Пространство имен - логическая группа ресурсов в кластере. Само по себе пространство имен обеспечивает только изоляцию имен, но многие другие ресурсы k8s могут затем зависеть от пространства имен, к которому нужно применить:
Пространство имен для клиента / экземпляра может быть полезным, например, если вы У меня был «премиум» клиент, который получал большую долю ресурсов. Это также может упростить маркировку и выбор экземпляров, которые будет использовать сетевая политика.
Среды могут хорошо подходить для пространства имен, поэтому подобное развертывание может go для dev / test / prod ns. Если вы предоставляете пользователям доступ к управлению или запросу самих ресурсов Kubernetes, пространства имен значительно упрощают управление.
Управление ресурсами пространства имен может выглядеть следующим образом:
kubectl create ns customer1
kubectl create -f deployment.yaml -n customer1
kubectl create ns customer2
kubectl create -f deployment.yaml -n customer2
Опять же, helm
в равной степени применимо к развертываниям пространства имен.
DNS, вероятно, тоже стоит упомянуть, контейнеры будут искать имена хостов в своем собственном пространстве имен по умолчанию. В пространстве имен customer1
поиск имени хоста service-name
приведет к service-name.customer1.svc.cluster.local
Аналогично в пространстве имен customer2
: поиск для service-name
- service-name.customer2.svc.cluster.local
Узлы
Клиенты могут быть прикреплены к определенным узлам (виртуальным или физическим) для обеспечения безопасности и / или изоляции ресурсов от других клиентов.
Кластеры
Разделение кластеров может обеспечить полную безопасность, изоляцию ресурсов и сети, не полагаясь на kubernetes для управления им.
Крупные приложения часто могут использовать полный кластер для каждой «группировки». Это приводит к огромным накладным расходам на управление для каждого кластера, но позволяет приблизиться к полной независимости между экземплярами. Безопасность может быть важным фактором для этого, поскольку вы можете обеспечить уровень изоляции между кластерами вне мастеров Kubernetes.
Сетевая политика
A сетевая политика позволяет вам ограничить доступ к сети между модулями / сервисами с помощью селекторов меток. Kubernetes будет активно управлять правилами брандмауэра, где бы ни планировались блоки в кластере. Это потребуется для обеспечения изоляции сети, аналогичной docker -созданию сети для каждого экземпляра.
Кластеру потребуется использовать сетевой плагин (CNI), который поддерживает сетевые политики, как Бязь .