Рубрики
Uncategorized

Политика и управление Kubernetes

Прежде чем я расскажу о политике и управлении для Kubernetes, давайте кратко поговорим о политике и губернане … Помечено Kubernetes, Cloud, Cloudnative, DevOps.

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

Итак, зачем нам нужно управление и политика для Kubernetes? Kubernetes обеспечивает контроль доступа на основе ролей (RBAC), что позволяет операторам определять очень гранулированным образом, какой идентичность может создавать или менеджер, какой ресурс. Но RBAC не позволяет нам контролировать спецификацию этих ресурсов. Как уже упоминалось, это необходимое требование для определения границ политики. Некоторые примеры:

  • Белый список реестров и изображений доверенных контейнеров
  • Требуемые спецификации безопасности контейнера
  • Требуемые этикетки для групповых ресурсов
  • разрешить конфликтующие ресурсы внедряния хоста
  • разрешить публично обнаженные услуги LoadBalancer

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

Открытый агент политики (OPA) это проект с открытым исходным кодом по Стайра . Он обеспечивает политику контроля для облачных средств с использованием унифицированного набора инструментов и структуры и декларативного подхода. Открытые агенты политики позволяют декларации и управлению политикой отделения из кода приложения, либо интегрируя Библиотека Opa Golang или вызов API остального в сложности DOPA DAEMON пример.

При этом OPA может использоваться для оценки любых входов на основе JSON по пользовательским политикам и отметить ввод как проход или сбой. С этим на месте, открытый политический агент может быть легко интегрирован с различными Инструменты и проекты Анкет Некоторые примеры:

  • API и разрешение на обслуживание с Посланник , Конг или Трафик
  • Политики авторизации для SQL, Кафка и другие
  • Авторизация сети контейнеров с Истио
  • Тестовые политики для Terraform Изменения инфраструктуры
  • Политики для SSH и SUDO
  • Политика и управление для Kubernetes

Политика открытых политических агентов написана на декларативном языке политики под названием Rego. Рего запросов — это претензии о данных, хранящихся в OPA. Эти запросы могут быть использованы для определения политик, которые перечисляют экземпляры данных, которые нарушают ожидаемое состояние системы.

Вы можете использовать РЕГО ПЛОХОВАЯ ПРЕИМУЩЕСТВА Чтобы познакомиться с политическим языком. На игровой площадке также содержится множество примеров, которые помогают вам начать писать свои собственные запросы.

Открытый политический агент Gatekeeper Познакомился с Google, Microsoft, Red Hat и Styra. Это Kubernetes Controller Построен вокруг OPA, чтобы интегрировать его с сервером API Kubernetes и обеспечивающими соблюдение политик, определенных Пользовательские определения ресурсов (CRDS) Анкет

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

Этот пост не будет охватывать, как установить привратник. Все шаги, а также подробная информация доступны Здесь Анкет

После установки привратника вы готовы определить свои первые политики. Но давайте сначала рассмотрим, что мы получили:

Привратник состоит из двух развертываний:

  • Привратник-Контроллер-Манеджер Является ли контроллер поступления, контролирующий сервер API Kubernetes для изменений ресурсов, проверки определений политики и разрешения действий.
  • Привратник-автор используется для проверки и аудирования существующих ресурсов.

Помимо этих двух развертываний, также были созданы два пользовательских определения ресурсов (CRD):

  • ConstraintTemplate используется для определения политики, основанной на метаданных и фактическом запросе Rego.
  • Конфигурация используется для определения того, какие ресурсы должны быть воспроизведены в экземпляре OPA, чтобы разрешить передовые запросы политики.

Первый пример

В этом примере мы хотим убедиться, что все этикетки, требуемые политикой, присутствовали в манифесте ресурса Kubernetes.

Для этого мы сначала должны построить наш запрос Rego:

package k8srequiredlabels

        violation[{"msg": msg, "details": {"missing_labels": missing}}] {
          provided := {label | input.review.object.metadata.labels[label]}
          required := {label | label := input.parameters.labels[_]}
          missing := required - provided
          count(missing) > 0
          msg := sprintf("you must provide labels: %v", [missing])
        }

Он состоит из пакета, содержащего определение нарушения. Нарушение определяло входные данные, условие, которое должно соответствовать, и сообщение, которое возвращается в случае нарушения.

Теперь нам нужно, чтобы привратник осознал наше определение. Это делается путем завершения нашего запроса Rego в ресурс Cantuptrate:

apiVersion: templates.gatekeeper.sh/v1beta1
kind: ConstraintTemplate
metadata:
  name: k8srequiredlabels
spec:
  crd:
    spec:
      names:
        kind: K8sRequiredLabels
        listKind: K8sRequiredLabelsList
        plural: k8srequiredlabels
        singular: k8srequiredlabels
      validation:
        openAPIV3Schema:
          properties:
            labels:
              type: array
              items: string
  targets:
    - target: admission.k8s.gatekeeper.sh
      rego: |
        package k8srequiredlabels

        violation[{"msg": msg, "details": {"missing_labels": missing}}] {
          provided := {label | input.review.object.metadata.labels[label]}
          required := {label | label := input.parameters.labels[_]}
          missing := required - provided
          count(missing) > 0
          msg := sprintf("you must provide labels: %v", [missing])
        }

ConstraintTemplate Ресурс содержит запрос Рего, а также некоторые метаданные. Как только мы применим ConstraintTemplate Ресурс будет создан новый CRD. В нашем случае это называется K8srequiredlabels Анкет Это позволяет нам легко взаимодействовать с нашей политикой позже.

Теперь мы определили нашу политику, но вы, возможно, заметили, что мы еще не определили, какой ярлык нам требуется ресурсы Kubernetes. Мы также еще не определили, на какие ресурсы Kubernetes нам также нравится применять эту политику. Для этого мы должны сначала создать еще один манифест под названием Ограничения :

apiVersion: constraints.gatekeeper.sh/v1beta1
kind: K8sRequiredLabels
metadata:
  name: ns-must-have-gk
spec:
  match:
    kinds:
      - apiGroups: [""]
        kinds: ["Namespace"]
  parameters:
    labels: ["gatekeeper"]

Ограничения Manifest позволяет нам обеспечить соблюдение нашей вышеуказанной политики, предоставляя наши параметры, а также ресурс Kubernetes, на который он должен действовать. В нашем примере мы хотим обеспечить соблюдение этой политики для всех ресурсов пространства имен и убедиться, что все они содержат ярлык привратника.

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

Репозиторий привратника Предоставляет еще несколько примеров, которые можно использовать для начала работы.

Политический аудит

Давайте поговорим об аудите. Зачем нам это нужно? Что ж, мы, возможно, создали ресурсы до того, как создали политику, и мы хотели бы просмотреть их, чтобы они соответствовали нашей политике. Или, может быть, мы просто хотим проверить наш кластер, не применяя политики.

Для этого мы можем использовать наше определение пользовательского ресурса K8sRequiredLabels, которое мы создали выше, и получить нашу информацию о аудите с сервера API Kubernetes, используя Kubectl или любой другой инструмент нашего выбора. В приведенном ниже примере я использовал Kubectl опишите k8srequiredlabels ns-must-have-gk Чтобы получить следующий вывод:

Кроме того, Gatekeeper предоставляет нам конечные точки Prometheus, которые можно использовать для сбора метрик и строительства мониторинга и оповещений на основе их. Оба, Привратник-Контроллер-Манеджер а также Привратник-автор разоблачают те конечные точки, которые можно использовать для сбора следующих метрик:

  • Gatekeeper_constraints: текущее количество ограничений
  • Gatekeeper_constraint_templates: текущее количество шаблонов ограничения
  • Gatekeeper_constraint_template_ingestion_count: Количество действий по приглашению шаблонов ограничений
  • Gatekeeper_constraint_template_ingestion_duration_seconds: распределение продолжительности проглатывания шаблона ограничения.
  • Gatekeeper_request_count: Количество запросов, которые направляются на приема WebHook с сервера API
  • Gatekeeper_Request_duration_seconds: Распределение проведения запроса на прием
  • Gatekeeper_violations: количество нарушений аудита на ограничение, обнаруженное в последнем цикле аудита
  • Gatekeeper_audit_last_run_time: Epoch TimeStam
  • Gatekeeper_audit_duration_seconds: Распределение цикла аудита.

Все, что вам нужно сделать, это дать вашему экземпляру Prometheus осознавать об этом. Самый простой способ-настраивать как развертывание, так и добавление хорошо известных аннотаций в спецификацию POD, чтобы позволить промежуточному скребке:

annotations:
  prometheus.io/port: "8888"
  prometheus.io/scrape: "true"

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

Счастливого аудита! 😃

Оригинал: «https://dev.to/nmeisenzahl/policy-and-governance-for-kubernetes-3n4p»