|
Este documento foi traduzido usando tecnologia de tradução automática de máquina. Sempre trabalhamos para apresentar traduções precisas, mas não oferecemos nenhuma garantia em relação à integridade, precisão ou confiabilidade do conteúdo traduzido. Em caso de qualquer discrepância, a versão original em inglês prevalecerá e constituirá o texto official. |
|
Esta é uma documentação não divulgada para Admission Controller 1.34-dev. |
Reutilizando Políticas de Validação de Admissão
O Kubernetes vanilla Políticas de Validação consistem nos seguintes recursos:
-
ValidatingAdmissionPolicy: descreve a lógica em CEL. Opcionalmente, também aceita parâmetros em
spec.paramKind. -
ValidatingAdmissionPolicyBinding: delimita a política.
Vamos ver um exemplo concreto. Essas e outras podem ser reutilizadas com SUSE Security Admission Controller’s cel-policy com pouco esforço.
Política de Validação de Admissão
A seguinte Política de Validação de Admissão é adaptada da documentação do Kubernetes.
Esta política verifica se o número de réplicas em implantações é menor ou igual a um padrão maxreplicas de 5. Os usuários podem substituir esse padrão por namespace ou implantação e escolher um número menor por meio do uso de um parâmetro.
Está vinculada a um ValidatingAdmissionPolicyBinding. Portanto, afeta apenas namespaces que têm um rótulo environment definido como test.
apiVersion: admissionregistration.k8s.io/v1
kind: ValidatingAdmissionPolicy
metadata:
name: "replicalimit-policy.example.com"
spec:
failurePolicy: Fail # (1)
matchConstraints: # (2)
resourceRules:
- apiGroups: ["apps"]
apiVersions: ["v1"]
operations: ["CREATE", "UPDATE"]
resources: ["deployments"]
variables: # (3)
- name: maxReplicas # hardcoded global default
expression: int(5)
paramKind: # (4)
apiVersion: v1
kind: ConfigMap # user-provided override
validations: # (5)
- expression: |
object.spec.replicas <= (
has(params.data.overrideReplicas) && int(params.data.overrideReplicas) < variables.maxReplicas
? int(params.data.overrideReplicas)
: variables.maxReplicas
)
messageExpression: |
'The number of replicas must be less than or equal to ' +
string( has(params.data.overrideReplicas) && int(params.data.overrideReplicas) < variables.maxReplicas
? int(params.data.overrideReplicas)
: variables.maxReplicas)
---
apiVersion: admissionregistration.k8s.io/v1
kind: ValidatingAdmissionPolicyBinding
metadata:
name: "replicalimit-binding-test.example.com"
spec:
policyName: "replicalimit-policy.example.com"
validationActions: [Deny] # (7)
matchResources: # (8)
namespaceSelector:
matchLabels:
environment: test
paramRef: # (4)
name: "replica-limit-override"
namespace: "test"
parameterNotFoundAction: Deny
---
apiVersion: v1
kind: ConfigMap
metadata:
name: replica-limit-override
namespace: test
data:
overrideReplicas: "3"
Aqui, temos uma política equivalente Admission Controller:
Admission Controller’s cel-policy
apiVersion: policies.kubewarden.io/v1
kind: ClusterAdmissionPolicy
metadata:
annotations:
io.kubewarden.policy.category: Resource validation # (9)
io.kubewarden.policy.severity: low # (9)
name: "cel-policy-replica-example"
spec:
module: registry://ghcr.io/kubewarden/policies/cel-policy:v1.4.0
failurePolicy: Fail # (6). Webhook behavior. Defaults to "Fail"
mode: protect # (7). Defaults to "protect"
rules: # (2)
- apiGroups: ["apps"]
apiVersions: ["v1"]
operations: ["CREATE", "UPDATE"]
resources: ["deployments"]
contextAwareResources: # (10). Fine-grained perms for accessing resources
- apiVersion: v1
kind: ConfigMap
settings:
failurePolicy: Fail # (1). CEL behavior. Defaults to "Fail"
variables: # (3)
- name: "replicas"
expression: "object.spec.replicas"
- name: maxReplicas
expression: int(5)
paramKind: # (4)
apiVersion: v1
kind: ConfigMap # user-provided override
paramRef: # (4)
name: "replica-limit-override"
namespace: "test"
parameterNotFoundAction: Deny
validations: # (5)
- expression: |
object.spec.replicas <= (
has(params.data.overrideReplicas) && int(params.data.overrideReplicas) < variables.maxReplicas
? int(params.data.overrideReplicas)
: variables.maxReplicas
)
messageExpression: |
'The number of replicas must be less than or equal to ' +
string( has(params.data.overrideReplicas) && int(params.data.overrideReplicas) < variables.maxReplicas
? int(params.data.overrideReplicas)
: variables.maxReplicas)
backgroundAudit: true # (9). Defaults to "true"
namespaceSelector: # (8)
matchLabels:
environment: test
---
apiVersion: v1
kind: ConfigMap
metadata:
name: replica-limit-override
namespace: test
data:
overrideReplicas: "3"
Observe os números comentados em ambos os manifests YAML. Vamos expandir sobre eles:
| # | campo VAP | cel-policy campo |
Descrição |
|---|---|---|---|
1 |
|
|
Comportamento CEL, para quando a expressão CEL avalia como falsa, há erros de runtime CEL, ou há CEL inválido ou mal configurado. Por exemplo, uma expressão CEL retornando falso, parâmetros ausentes ou variáveis ausentes. Não confundir com (6). |
2 |
|
|
Ambos aceitam o mesmo RuleWithOperations que informa sobre que tipo de Recurso a política se aplica. |
3 |
|
|
Em Admission Controller’s |
4 |
|
|
Em Admission Controller’s |
5 |
|
|
Em Admission Controller’s |
6 |
|
|
Comportamento do Webhook, para erro ou timeout da API do Kubernetes Webhook, ou para avaliação de matchConditions. Não confundir com (1). |
7 |
|
|
|
8 |
|
|
Defina maneiras de restringir usando Seletores. As políticas de Admission Controller têm como |
9 |
|
|
Use campos Admission Controller em vez disso para definir o uso da política em Audit Scanner, e sua categoria e severidade para OpenReports. |
10 |
|
|
As políticas de Admission Controller’s têm permissões detalhadas para leitura dos Recursos do cluster. Aqui é usado para ler os parâmetros. |
|
|
As políticas de Admission Controller’s têm |
|
|
Recursos exclusivos para Admission Controller |
Para outros recursos, veja o restante dos exemplos do tutorial CEL. |
|
Você pode usar a ferramenta Este procedimento de migração VAP descreve como fazê-lo. |
Equivalências ainda a serem implementadas
Existem alguns recursos VAP que ainda não foram implementados. Se você está ansioso por eles, entre em contato conosco. Estes são os eventos:
-
VAP Anotações de Auditoria (ValidatingAdmissionPolicy
spec.auditAnnotationsquando ValidatingAdmissionPolicyBindingspec.validationActionsestá definido como "Audit"). Isso é coberto pelo Admission Controller’s Audit Scanner e PolicyReports, que permite auditar recursos já no cluster. -
CEL restrições de recursos e limite de custo estimado. Isso é coberto pelo Admission Controller’s proteção geral de tempo limite da política.
Aplicando a política
Como de costume, podemos implantar nossa política instanciando seu manifesto:
$ kubectl apply -f ./cel-policy-example.yaml
E então testá-la instanciando uma implantação:
$ kubectl apply -f - <<EOF
apiVersion: v1
kind: Namespace
metadata:
name: test
labels:
environment: test
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
namespace: test
spec:
replicas: 6
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
EOF
namespace/test created
Error from server: error when creating "STDIN":
admission webhook "clusterwide-cel-policy-replica-example.kubewarden.admission" denied the request:
The number of replicas must be less than or equal to 5