Здравствуйте, все, в современном блоге, мы собираемся узнать о политике в качестве кода в Куберане, используя 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 создала лучшие практики и самые используемые политики на этом сайте здесь Отказ Есть три различных типов политиков.
- Утверждать
- Мутата
- Генерация
Мы увидим демонстрационную демонстрацию в нижнем применении и политике, мы можем обеспечить применение развертываний 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»