Каков наилучший подход к созданию пространств имен? - PullRequest
0 голосов
/ 29 января 2019

У меня есть приложение с 5 микросервисами (iam, курсы ...).Я хочу знать, что является лучшим подходом для миграции их в kubernetes.Я думал создать пространство имен с помощью среды, как Google рекомендует: 1. prod 2. dev 3. staging

, тогда я подумал, что может быть лучше создать пространство имен с помощью среды и микросервисов.1. iam-prod 2. iam-dev 3. подготовка iam 1. курсы-разработка 2. курсы-разработки 3. подготовка курсов ... но этот подход может быть немного сложным.Потому что мне нужно общаться друг с другом.

Какой подход, по вашему мнению, лучше?

Ответы [ 5 ]

0 голосов
/ 30 января 2019

Ничто из перечисленного не является идеальным решением.Я пойду, почему.

Безопасность

Пространства имен - это самая простая граница для управления разрешениями RBAC.В общем случае вы захотите использовать предварительно подготовленные роли кластера администратора и редактора, чтобы ограничить доступ пользователей к использованию пространств имен.Это означает, что люди и службы, которые совместно используют пространства имен, также делятся видимостью секретов.Таким образом, пространство имен становится радиусом взрыва для компрометации секретов.

Чтобы уменьшить взрывной радиус раскрытия секретов, вы можете либо связать роль уровня управления микро-ресурсами (что неоправданно затратно, без дополнительной автоматизации и инструментов), либо разделить службы по пространствам имен, чтобы только тесно связанные службы совместно использовали пространство имен.

Изоляция

Изоляция ресурсов Kubernetes относительно плоха между пространствами имен.Нет способа принудительно развернуть пространство имен в другом пуле узлов, чем другое пространство имен без пользовательских контроллеров доступа.Таким образом, изоляция ресурсов фактически является обязательной, что является одновременно небезопасным и неосуществимым.

Благодаря этому фактически является более безопасным и лучше изолированным, чтобы иметь разные среды (dev, staging, prod) в отдельных кластерах K8s.все вместе.Но это, очевидно, дороже и больше накладных расходов на управление.Так что это экономически выгодно только тогда, когда у вас есть много услуг и достаточно ресурсов, чтобы оправдать дополнительные накладные расходы.

Следствием плохой изоляции ресурсов является то, что ваши рабочие и промежуточные рабочие нагрузки могут эффективно выполнять DOS для ваших рабочих нагрузок, просто используя общие ресурсы.Процессор / память / диск являются очевидными виновниками.Это может быть выполнено с помощью пользовательских контроллеров доступа.Но более коварной проблемой является совместное использование входных прокси-серверов, балансировщика нагрузки и сетей, которые сложнее изолировать между пространствами имен.

Еще одним следствием плохой изоляции является то, что службы разработки с плохой безопасностью могут быть скомпрометированы, обеспечивая горизонтальный доступ к службам prod.На самом деле, никто не развертывает приложения dev как готовые к работе и безопасные.Так что без жесткой изоляции ваша безопасность тоже подвергается риску.

Квоты

Квоты управляются на уровне пространства имен.Поэтому, если вы хотите изолировать квоту по среде и команде, вы не можете использовать пространства имен для обоих.И если вы хотите иметь квоту на проект, вам потребуется проект для каждого пространства имен.Единственный способ справиться со всеми тремя - это использовать несколько кластеров, несколько пространств имен и несколько пулов узлов с настраиваемым применением развертывания / принятия, что создает временную иерархию или матрицу.

Иерархия пространств имен

Пространства имен плоские.Если вы используете их для env, вы не можете использовать их для контроля доступа на уровне организации или команды.Если вы используете их для контроля доступа на уровне команды, ваши инженеры могут использовать их для границ абстракции уровня компонента / проекта / системы.Вы можете выбрать только один, или хаос будет неуправляемым.

Заключение

К сожалению, абстракция пространства имен используется в 3 или 4 случаях использования в сообществе Kubernetes, и это не совсем идеально.для любого из них.Таким образом, либо вы выбираете неидеальный вариант использования для оптимизации, либо вы управляете несколькими кластерами и пишете множество пользовательских средств автоматизации для обработки всех вариантов использования.

0 голосов
/ 29 января 2019

Перейти с одним пространством имен для каждой среды.Вы также можете определить квоту ресурсов по шагам имен.Таким образом, каждая среда приложения может управляться независимо

0 голосов
/ 29 января 2019

Если вы перейдете ко второму подходу, вы создадите ненужную сложность, не добившись никакой выгоды.Также подумайте о ситуации, когда ваши микросервисы растут. Собираетесь ли вы создавать новый кластер для каждого из них. Это вообще не рекомендуется.

Концепция пространства имен не должна быть связана с приложениями, а связана с пользователями. Обратитесь к документу k8, как показано ниже

"Пространства имен предназначены для использования в средах с большим количеством пользователей, распределенных по нескольким группам или проектам. Для кластеров с несколькими или десятками пользователей вам не нужно создавать или думать о них.пространства имен вообще. Начните использовать пространства имен, когда вам понадобятся функции, которые они предоставляют. "

Кроме того, даже если рекомендуется первый подход, пожалуйста, используйте отдельный кластер для prod, так как он должен быть более безопасным и высокодоступным с надлежащим планом аварийного восстановления.готов и проверен.

0 голосов
/ 29 января 2019

Как и в случае с другим ответом, вы должны создать изоляцию пространства имен для prod, dev and staging.Это обеспечит решение нескольких нюансов ...

  1. В идеале ваши модули в любой из сред не должны общаться между средами
  2. Вы можете управлять сетевыми политикамигораздо чище и управляемее с этой организацией k8s видов
0 голосов
/ 29 января 2019

Вы можете запустить несколько микросервисов в одном пространстве имен.Итак, я бы использовал пространства имен prod, dev и staging, в которых вы можете иметь один или несколько экземпляров каждого микросервиса.

пока. Если вы хотите использовать отдельные пространства имен для отдельных сред микросервисов, они по-прежнему могут обмениваться данными, используя service .URL-адрес DNS будет SERVICE_NAME.NAMESPACE.SVC.ref: https://kubernetes.io/docs/concepts/services-networking/dns-pod-service/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...