O Policy Controller é fornecido com uma biblioteca padrão de modelos de restrição que podem ser usados com o pacote de política de custo e confiabilidade, que ajuda a adotar as práticas recomendadas para executar clusters econômicos do GKE sem comprometer o desempenho ou a confiabilidade das cargas de trabalho.
Esta página contém instruções para aplicar manualmente um pacote de políticas. Como alternativa, você pode aplicar pacotes de políticas diretamente.
Restrições do pacote de políticas de custo e confiabilidade
| Nome da restrição | Descrição da restrição |
|---|---|
| cost-reliability-v2023-pod-disruption-budget | Requer a configuração de PodDisruptionBudget para Deployments, ReplicaSets, StatefulSets e ReplicationControllers. |
| cost-reliability-v2023-pod-resources-best-practices | Exige que os contêineres definam solicitações de recursos e sigam as práticas recomendadas. |
| cost-reliability-v2023-required-labels | Exige que todos os pods e controladores (ReplicaSet, Deployment, StatefulSet e DaemonSet) tenham os rótulos necessários: ambiente, equipe e app. |
| cost-reliability-v2023-restrict-repos | Restringe as imagens de contêiner a uma lista de repositórios permitidos que podem usar o Artifact Registry e aproveitar o streaming de imagens. |
| cost-reliability-v2023-spotvm-termination-grace | Requer um terminationGracePeriodSeconds de 15 segundos ou menos para pods e modelos de pod com um nodeSelector ou nodeAfffinty para gke-spot. |
Antes de começar
- Instale e inicialize a Google Cloud CLI,
que fornece os
comandos
gcloudekubectlusados nestas instruções. Se você usa o Cloud Shell, a Google Cloud CLI já vem pré-instalada. - Instale o Controlador de Políticas no cluster com a biblioteca padrão de modelos de restrição. Você também precisa ativar a compatibilidade com restrições referenciais, já que este pacote contém restrições referenciais.
Configurar o Controlador de Políticas com restrições referenciais
Salve o seguinte manifesto YAML em um arquivo como
policycontroller-config.yaml. O manifesto configura o Policy Controller para observar tipos específicos de objetos.apiVersion: config.gatekeeper.sh/v1alpha1 kind: Config metadata: name: config namespace: "gatekeeper-system" spec: sync: syncOnly: - group: "" version: "v1" kind: "Service" - group: "policy" version: "v1" kind: "PodDisruptionBudget"Aplique o manifesto
policycontroller-config.yaml:kubectl apply -f policycontroller-config.yaml
Configurar o cluster e a carga de trabalho
- Qualquer
podselecionado por umserviceprecisa incluir uma sondagem de prontidão. deployment,replicaset,statefulsetereplicationcontrollerdevem incluirpoddisruptionbudget.- Todos os contêineres precisam incluir solicitações
cpuememory, e o limitememoryé igual a solicitaçõesmemoryque seguem as práticas recomendadas. - Adicione os rótulos
environment,teameappa todos os pods e modelos de pod. - Hospede imagens de contêiner usando o Artifact Registry na mesma
região do cluster para ativar o streaming de imagem.
Permita o Artifact Registry relevante seguindo o exemplo em
cost-reliability-v2023-restrict-repos. - Todos os pods e modelos de pod que usam
gke-spotprecisam incluir umterminationGracePeriodSecondsde 15 segundos ou menos.
Pacote de políticas de custo e confiabilidade da auditoria
O Policy Controller permite aplicar políticas ao cluster do Kubernetes. Para ajudar a testar suas cargas de trabalho e a conformidade delas com as políticas de custo e confiabilidade descritas na tabela anterior, implante essas restrições no modo de "auditoria" a fim de revelar violações e, principalmente, ter a chance de corrigi-las antes de aplicá-las no cluster do Kubernetes.
É possível aplicar essas políticas com spec.enforcementAction definido como dryrun usando
kubectl,
kpt
ou
Config Sync
.
kubectl
(Opcional) Visualize as restrições de política com o kubectl:
kubectl kustomize https://github.com/GoogleCloudPlatform/gke-policy-library.git/anthos-bundles/cost-reliability-v2023
Aplique as restrições da política com o kubectl:
kubectl apply -k https://github.com/GoogleCloudPlatform/gke-policy-library.git/anthos-bundles/cost-reliability-v2023
A saída é esta:
gkespotvmterminationgrace.constraints.gatekeeper.sh/cost-reliability-v2023-spotvm-termination-grace created k8sallowedrepos.constraints.gatekeeper.sh/cost-reliability-v2023-restrict-repos created k8spoddisruptionbudget.constraints.gatekeeper.sh/cost-reliability-v2023-pod-disruption-budget created k8spodresourcesbestpractices.constraints.gatekeeper.sh/cost-reliability-v2023-pod-resources-best-practices created k8srequiredlabels.constraints.gatekeeper.sh/cost-reliability-v2023-required-labels created
Verifique se as restrições da política foram instaladas e se existem violações no cluster:
kubectl get constraints -l policycontroller.gke.io/bundleName=cost-reliability-v2023
O resultado será assim:
NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS gkespotvmterminationgrace.constraints.gatekeeper.sh/cost-reliability-v2023-spotvm-termination-grace dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8spodresourcesbestpractices.constraints.gatekeeper.sh/cost-reliability-v2023-pod-resources-best-practices dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8spoddisruptionbudget.constraints.gatekeeper.sh/cost-reliability-v2023-pod-disruption-budget dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8sallowedrepos.constraints.gatekeeper.sh/cost-reliability-v2023-restrict-repos dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8srequiredlabels.constraints.gatekeeper.sh/cost-reliability-v2023-required-labels dryrun 0
kpt
Instale e configure o kpt.
O kpt é usado nestas instruções para personalizar e implantar recursos do Kubernetes.
Faça o download do pacote de políticas do PCI-DSS v3.2.1 no GitHub usando o kpt:
kpt pkg get https://github.com/GoogleCloudPlatform/gke-policy-library.git/anthos-bundles/cost-reliability-v2023
Execute a função
set-enforcement-actiondo kpt para definir a ação de aplicação das políticas comodryrun:kpt fn eval cost-reliability-v2023 -i gcr.io/kpt-fn/set-enforcement-action:v0.1 \ -- enforcementAction=dryrun
Inicialize o diretório de trabalho com o kpt, que cria um recurso para acompanhar as alterações:
cd cost-reliability-v2023 kpt live init
Aplique as restrições da política com kpt:
kpt live apply
Verifique se as restrições da política foram instaladas e se existem violações no cluster:
kpt live status --output table --poll-until current
O status
CURRENTconfirma a instalação bem-sucedida das restrições.
Config Sync
Instale e configure o kpt.
O kpt é usado nestas instruções para personalizar e implantar recursos do Kubernetes.
Os operadores que usam o Config Sync para implantar políticas nos clusters podem usar as seguintes instruções:
Altere para o diretório de sincronização do Config Sync:
cd SYNC_ROOT_DIR
Para criar ou anexar
.gitignorecomresourcegroup.yaml:echo resourcegroup.yaml >> .gitignore
Crie um diretório
policiesdedicado:mkdir -p policies
Faça o download do pacote de política de custo e confiabilidade no GitHub usando o kpt:
kpt pkg get https://github.com/GoogleCloudPlatform/gke-policy-library.git/anthos-bundles/cost-reliability-v2023 policies/cost-reliability-v2023
Execute a função
set-enforcement-actiondo kpt para definir a ação de aplicação das políticas comodryrun:kpt fn eval policies/cost-reliability-v2023 -i gcr.io/kpt-fn/set-enforcement-action:v0.1 -- enforcementAction=dryrun
(Opcional) Visualize as restrições de política a serem criadas:
kpt live init policies/cost-reliability-v2023 kpt live apply --dry-run policies/cost-reliability-v2023
Se o diretório de sincronização do Config Sync usar Kustomize, adicione
policies/cost-reliability-v2023à raizkustomization.yaml. Caso contrário, remova o arquivopolicies/cost-reliability-v2023/kustomization.yaml:rm SYNC_ROOT_DIR/policies/cost-reliability-v2023/kustomization.yaml
Envie as alterações para o repositório do Config Sync:
git add SYNC_ROOT_DIR/policies/cost-reliability-v2023 git commit -m 'Adding Cost and Reliability policy audit enforcement' git push
Verifique o status da instalação:
watch gcloud beta container fleet config-management status --project PROJECT_ID
O status
SYNCEDconfirma a instalação das políticas.
Visualizar violações de políticas
Depois que as restrições de política são instaladas no modo de auditoria, as violações no cluster podem ser visualizadas na interface usando o Painel do Controlador de políticas.
Também é possível usar kubectl para visualizar violações no cluster usando o seguinte
comando:
kubectl get constraint -l policycontroller.gke.io/bundleName=cost-reliability-v2023 -o json | jq -cC '.items[]| [.metadata.name,.status.totalViolations]'
Se houver violações, uma lista das mensagens de violação por restrição poderá ser visualizada com:
kubectl get constraint -l policycontroller.gke.io/bundleName=cost-reliability-v2023 -o json | jq -C '.items[]| select(.status.totalViolations>0)| [.metadata.name,.status.violations[]?]'
Ação de cumprimento do pacote de políticas de custo e confiabilidade da mudança
Depois de analisar as violações de políticas no cluster, considere
alterar o modo de aplicação para que o controlador de admissão warn
ou deny bloqueie a aplicação de recursos sem compliance no cluster.
kubectl
Use o kubectl para definir a ação de cumprimento das políticas como
warn:kubectl get constraints -l policycontroller.gke.io/bundleName=cost-reliability-v2023 -o name | xargs -I {} kubectl patch {} --type='json' -p='[{"op":"replace","path":"/spec/enforcementAction","value":"warn"}]'Verifique se a ação de cumprimento das restrições da política foi atualizada:
kubectl get constraints -l policycontroller.gke.io/bundleName=cost-reliability-v2023
kpt
Execute a função
set-enforcement-actiondo kpt para definir a ação de aplicação das políticas comowarn:kpt fn eval -i gcr.io/kpt-fn/set-enforcement-action:v0.1 -- enforcementAction=warn
Aplique as restrições da política:
kpt live apply
Config Sync
Os operadores que usam o Config Sync para implantar políticas nos clusters podem usar as seguintes instruções:
Altere para o diretório de sincronização do Config Sync:
cd SYNC_ROOT_DIR
Execute a função
set-enforcement-actiondo kpt para definir a ação de aplicação das políticas comowarn:kpt fn eval policies/cost-reliability-v2023 -i gcr.io/kpt-fn/set-enforcement-action:v0.1 -- enforcementAction=warn
Envie as alterações para o repositório do Config Sync:
git add SYNC_ROOT_DIR/policies/cost-reliability-v2023 git commit -m 'Adding Cost and Reliability policy bundle warn enforcement' git push
Verifique o status da instalação:
nomos status
O cluster vai mostrar um status de
SYNCEDcom as políticas instaladas.
Aplicação da política de testes
Crie um recurso não compatível no cluster usando o seguinte comando:
cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: Pod
metadata:
namespace: default
name: wp-non-compliant
labels:
app: wordpress
spec:
containers:
- image: wordpress
name: wordpress
ports:
- containerPort: 80
hostPort: 80
name: wordpress
EOF
O controlador de admissão produzirá um alerta listando as violações da política que esse recurso viola, conforme mostrado no exemplo a seguir:
Warning: [cost-reliability-v2023-pod-resources-best-practices] Container <wordpress> must set <cpu> request. Warning: [cost-reliability-v2023-pod-resources-best-practices] Container <wordpress> must set <memory> request. Warning: [cost-reliability-v2023-required-labels] This app is missing one or more required labels: `environment`, `team`, and `app`. Warning: [cost-reliability-v2023-restrict-repos] container <wordpress> has an invalid image repo <wordpress>, allowed repos are ["gcr.io/gke-release/", "gcr.io/anthos-baremetal-release/", "gcr.io/config-management-release/", "gcr.io/kubebuilder/", "gcr.io/gkeconnect/", "gke.gcr.io/"] pod/wp-non-compliant created
Remover o pacote de políticas de custo e confiabilidade
Se necessário, o pacote de políticas de custo e confiabilidade pode ser removido do cluster.
kubectl
Use o kubectl para remover as políticas:
kubectl delete constraint -l policycontroller.gke.io/bundleName=cost-reliability-v2023
kpt
Remova as políticas:
kpt live destroy
Config Sync
Os operadores que usam o Config Sync para implantar políticas nos clusters podem usar as seguintes instruções:
Envie as alterações para o repositório do Config Sync:
git rm -r SYNC_ROOT_DIR/policies/cost-reliability-v2023 git commit -m 'Removing Cost and Reliability policies' git push
Verifique o status:
nomos status
O cluster vai mostrar o status
SYNCEDcom os recursos removidos.