53 lines
1.9 KiB
YAML
53 lines
1.9 KiB
YAML
apiVersion: kyverno.io/v1
|
||
kind: ClusterPolicy
|
||
metadata:
|
||
name: restrict-deploys-during-freeze
|
||
annotations:
|
||
policies.kyverno.io/title: "Блокировка деплойментов во время freeze"
|
||
policies.kyverno.io/category: Governance
|
||
policies.kyverno.io/severity: high
|
||
policies.kyverno.io/subject: Deployment
|
||
policies.kyverno.io/description: >-
|
||
Блокирует создание новых Deployments когда в ConfigMap
|
||
deployment-freeze-config поле freeze_active=true.
|
||
Пользователи группы emergency-deployers и system:masters
|
||
могут деплоить даже во время freeze.
|
||
Активируйте freeze: kubectl patch configmap deployment-freeze-config
|
||
-n kyverno --type merge -p '{"data":{"freeze_active":"true"}}'
|
||
spec:
|
||
rules:
|
||
- name: check-freeze
|
||
match:
|
||
resources:
|
||
kinds:
|
||
- Deployment
|
||
preconditions:
|
||
any:
|
||
- key: "{{ request.operation }}"
|
||
operator: Equals
|
||
value: CREATE
|
||
context:
|
||
- name: freezeConfig
|
||
configMap:
|
||
name: deployment-freeze-config
|
||
namespace: kyverno
|
||
validate:
|
||
message: >-
|
||
Деплойменты заморожены с {{ freezeConfig.data.freeze_start }}
|
||
до {{ freezeConfig.data.freeze_end }}.
|
||
Причина: {{ freezeConfig.data.freeze_reason }}
|
||
Для экстренного деплоя обратитесь к oncall инженеру.
|
||
deny:
|
||
conditions:
|
||
all:
|
||
# Freeze активен
|
||
- key: "{{ freezeConfig.data.freeze_active }}"
|
||
operator: Equals
|
||
value: "true"
|
||
# Пользователь НЕ в группе экстренного деплоя
|
||
- key: "{{ request.userInfo.groups }}"
|
||
operator: AllNotIn
|
||
value:
|
||
- emergency-deployers
|
||
- system:masters
|