- Устанавливаем Gatekeeper в кластер Kubernetes, предварительно создав namespace "gatekeeper-system":
kubectl create namespace gatekeeper-system
helm repo add gatekeeper https://open-policy-agent.github.io/gatekeeper/charts
helm install gatekeeper/gatekeeper --name-template=gatekeeper --namespace gatekeeper-system --create-namespace
- Проверяем, что все установлено и запущено
kubectl get all -n gatekeeper-system
- Проверяем validation webhook от Gatekeeper:
kubectl get validatingwebhookconfigurations
- Попробуем запустить pod, который изначально является нежелательным в системе и имеет дыру в безопасности. Этот pod будет запускаться на controleplane-ноде и монтировать внутрь себя весь корневой каталог в папку /host.
cd ./check_privileges/
kubectl create -f bad_pod.yaml
- Убедимся, что Pod запустился. Попробуем зайти внутрь и посмотреть на файлы хостовой системы
kubectl exec bad-pod -it -- bash
ls -l /host/
- Такое поведение недопустимо на продакшн с точки зрения безопасности, поэтому запретим запуск подобных pod'ов. Для начала удалим текущий pod
kubectl delete pod bad-pod
- Применяем настройки Open Policy Agent. В файле template.yaml у нас хранится описание самого правила, а в файле constraint.yaml - значения для этого правила.
kubectl create -f template.yaml
kubectl create -f constraint.yaml
- Попробуем снова запустить "плохой" pod:
kubectl create -f bad_pod.yaml
- Видим ошибку со стороны GateKeeper на запрещенные поля в манифесте pod'а. Стоит проверить что своими действиями мы не сломали создание "хороших" pod'ов, т.е. запуск безопасных манифестов в кластере все еще возможен:
kubectl create -f good_pod.yaml