Рубрики
Uncategorized

Установка политики в качестве кода с использованием Kyverno в Кубернанах

Здравствуйте, все, в современном блоге, мы собираемся узнать о политике в качестве кода в Куберане, используя Kyverno. … Помечено с AWS, Kubernetes, Devops.

Здравствуйте, все, в современном блоге, мы собираемся узнать о политике в качестве кода в Куберане, используя Kyverno. Давайте начнем.

Что такое политика как код?

Политика в качестве кода (PAC) — это идея написания кода на языке высокого уровня для управления и автоматизации политик. Команда DEVOPS может принять лучшие практики, представляя политику в качестве кода, такого как контроль версий, автоматическое тестирование и автоматическое развертывание. Вы можете использовать эти политики в режиме аудита или введения для контроля в мониторе существующих рабочих нагрузок, сервисов для неправильной очистки или предотвращения ошибок, применяемых в кластере.

Политика как код в Куберане

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

Три категории в политике для Кубератесов:

  • Стандартные политики — лучшие практики по кластеру в организациях
    • E.G: требует ресурсов для указания ограничений ресурсов. Предотвратить работу нагрузки как root, и т. Д.
  • Организация политики — обеспечить соблюдение политики, характерных для вашей организации
    • E.G — Обеспечить лиц для привлечения личного репозитория изображения для тяги, наклеек, таких как имя приложения, среда для уточнения в рабочих нагрузках, политиках с требованиями по соблюдению организации и аудита.
  • Политика окружающей среды — обеспечивает соблюдение политики, характерных для окружающей среды
    • E.G — Срок действия безопасности в кластере производства

Kyverno — политический двигатель

Kyverno (Greek for «управление») представляет собой политический двигатель, разработанный специально для Кубератесов. Особенности

  • Политики как ресурсы Kubernetes в Ямле (нет нового языка, чтобы узнать!)
  • Проверьте, мутировать или генерировать любой ресурс с использованием Kustomize OllOles
  • Сопоставить ресурсы с использованием селекторов и подстановочных знаков
  • Блок неконденсных ресурсов с использованием контроля приема или отчетности о нарушениях политики
  • Тестовые политики и проверка ресурсов с использованием Kyverno CLI, на вашем CI/CD-трубопроводе, прежде чем применять их в свой кластер

Kyverno/Kyverno

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

Как это работает?

Kyverno работает как динамический контроллер вступления в кластере Kubernetes. Kyverno получает подтверждение и мутационные обратные вызовы http-webhook http от Kube-Apiserver и применяют соответствующие политики для возврата результатов, которые обеспечивают принудительные политики или запросы на отклонение.

Начиная

Предварительное условие для этого руководства является функциональным кластером Kubernetes. Вы можете создать кластер EKS, используя Экктл инструмент.

apiVersion: eksctl.io/v1alpha5
kind: ClusterConfig

metadata:
  name: eks-k8s-policy-demo
  region: us-east-1

availabilityZones: 
  - us-east-1a
  - us-east-1b

managedNodeGroups:
  - name: eks-k8s-policy-demo-ng
    instanceType: t3.medium
    minSize: 1
    maxSize: 5

Политика и использование случаев

Команда Kyverno создала лучшие практики и самые используемые политики на этом сайте здесь Отказ Есть три различных типов политиков.

  1. Утверждать
  2. Мутата
  3. Генерация

Мы увидим демонстрационную демонстрацию в нижнем применении и политике, мы можем обеспечить применение развертываний Kubernetes.

  • Принудительное «Название приложения» этикетка в POD
  • Требуют пределов и запросов
  • Добавить сетевую политику

Принудительное «Название приложения» этикетка в POD

apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
  name: require-labels
spec:
  validationFailureAction: enforce
  rules:
  - name: check-for-labels
    match:
      resources:
        kinds:
        - Pod
    validate:
      message: "The label `app.kubernetes.io/name` is required."
      pattern:
        metadata:
          labels:
            app.kubernetes.io/name: "?*"

Давайте посмотрим, как эта политика. Работает, создавая развертывание в POD. Применить вышеуказанную политику в вашем кластере. Создайте развертывание надувания в кластере без каких-либо меток.

➜  kyverno-demo git:(main) ✗  kubectl create deployment inflate --image=public.ecr.aws/eks-distro/kubernetes/pause:3.2
error: failed to create deployment: admission webhook "validate.kyverno.svc" denied the request:

resource Deployment/default/inflate was blocked due to the following policies

require-labels:
  autogen-check-for-labels: 'validation error: The label `app.kubernetes.io/name`
    is required. Rule autogen-check-for-labels failed at path /spec/template/metadata/labels/app.kubernetes.io/name/'

Теперь давайте создадим развертывание с app.kubernetes.io/name метка.

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app.kubernetes.io/name: inflate
  name: inflate
spec:
  replicas: 1
  selector:
    matchLabels:
      app.kubernetes.io/name: inflate
  template:
    metadata:
      labels:
        app.kubernetes.io/name: inflate
    spec:
      containers:
      - image: public.ecr.aws/eks-distro/kubernetes/pause:3.2
        name: pause

➜  kyverno-demo git:(main) ✗  kubectl apply -f deployment.yaml
deployment.apps/inflate created

Требуют пределов и запросов

apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
  name: require-requests-limits
spec:
  validationFailureAction: enforce
  rules:
  - name: validate-resources
    match:
      resources:
        kinds:
        - Pod
    validate:
      message: "CPU and memory resource requests and limits are required."
      pattern:
        spec:
          containers:
          - resources:
              requests:
                memory: "?*"
                cpu: "?*"
              limits:
                memory: "?*"

Эти политики являются политики типа валидации. Он подтверждает конкретный рисунок в ваших объектах API Kubernetes.

Добавить сетевую политику

apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
  name: add-networkpolicy
spec:
  validationFailureAction: enforce
  rules:
  - name: default-deny
    match:
      resources: 
        kinds:
        - Namespace
    generate:
      kind: NetworkPolicy
      name: default-deny
      namespace: "{{request.object.metadata.name}}"
      synchronize: true
      data:
        spec:
          # select all pods in the namespace
          podSelector: {}
          # deny all traffic
          policyTypes: 
          - Ingress
          - Egress

Мониторинг — приборная панель

У Kyverno есть метрики, выставленные через конечную точку метрики PROMETHEUS. Вы можете скрестите метрики или отображение Kyverno на панели инструментов Grafana. У Kyverno есть политика репортера UI, который может нацелить различные каналы. Оформить заказ здесь.

Kyverno/Policy-Reporter

Создает метрики PROMETHEUS для полицепортов и кластерполиполей. Корабли с дополнительной веб-пользователем UI и могут отправлять новые результаты для различных клиентов, таких как Loki и Elasticsearch. Обеспечивает дополнительный подраздел мониторинга с помощью Dishboards Selectoritor и Grafana для оператора PROMETHEUS.

Сдвиг влево

Вы можете подтвердить политики перед применением кластера с помощью CLI. Я встроил действие Kyverno CLI в GitHub перед развертыванием файлов YAML в кластере Kubernetes.

Ksivamuthu/Kyverno-Policy-Demo

- name: Validate policy
        uses: gbaeke/kyverno-cli@v1
        with:
          command: |
            kyverno apply ./policies --resource=./k8s/2048.yaml

После исправления файлов YAML

Вывод

Вы можете улучшить положение безопасности для ваших кластеров с политиками в качестве кода с использованием Kyverno. Нет необходимости изучать новый язык для создания или менеджеров политики. Он работает с вашими существующими инструментами, такими как Git, Kustomize, Kubectl и т. Д.

Я SIVA — работаю как SR. Программный архитектор на компьютерных предприятиях Inc в Orlando. Я AWS Community Builder, посол AUTH0 И я собираюсь написать много о облаках, контейнерах, IOT и DEVOPS. Если вы заинтересованы в любом из этого, обязательно следите за мной, если вы еще этого не сделали. Пожалуйста, следуйте за мной @ksivamuthu Twitter или проверьте мои блоги на https://blog.sivamuthukumar.com Действительно

Оригинал: «https://dev.to/aws-builders/enforcing-policy-as-code-using-kyverno-in-kubernetes-3epk»