Pular para o conteúdo principal

Kubernetes

Definição de Namespace

Todo namespace carrega a chave semântica completa como labels, além de labels de rastreabilidade do Backstage e ArgoCD.

apiVersion: v1
kind: Namespace
metadata:
name: payments-prod-api
labels:
# Segmentos da convenção
project: payments
env: prod
service: api
team: team-payments

# Labels semânticas do Backstage
backstage.io/domain: payments
backstage.io/system: gateway
backstage.io/component: gateway-api

# Rastreabilidade ArgoCD
argocd/app: gateway-api-prod
argocd/app-set: gateway
argocd/project: payments

Consultando Entre Dimensões

kubectl get ns -l project=payments # todos os namespaces de um domínio
kubectl get ns -l env=prod # todos os namespaces de prod
kubectl get ns -l backstage.io/component=gateway-api # todos os envs de um component
kubectl get ns -l argocd/app=gateway-api-prod # namespace de uma Application
kubectl get ns --show-labels # visão completa de labels

NetworkPolicy — Isolamento por Projeto

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: default-isolation
namespace: payments-prod-api
spec:
podSelector: {}
policyTypes: [Ingress, Egress]
ingress:
- from:
- namespaceSelector:
matchLabels:
project: payments
- from:
- namespaceSelector:
matchLabels:
project: platform
service: ingress
egress:
- to:
- namespaceSelector:
matchLabels:
project: payments
- to:
- namespaceSelector:
matchLabels:
project: platform
- ports:
- {protocol: UDP, port: 53}
- {protocol: TCP, port: 53}

ResourceQuota — Dimensionado por Ambiente

Gerado automaticamente pelo template create-service:

EnvCPU reqMem reqCPU limitMem limitPods
dev500m512Mi11Gi5
staging24Gi48Gi10
prod48Gi816Gi20

Padrões de Segurança de Carga de Trabalho

Todo Deployment gerado pelo create-service inclui:

spec.securityContext:
runAsNonRoot: true
runAsUser: 1000
fsGroup: 1000

containers[*].securityContext:
allowPrivilegeEscalation: false
readOnlyRootFilesystem: true
capabilities:
drop: [ALL]

O HPA escala réplicas por ambiente (dev: 1→2, staging: 2→5, prod: 3→10). PodDisruptionBudget (minAvailable: 1) é aplicado em prod. ignoreDifferences em /spec/replicas evita que o ArgoCD sobrescreva o HPA.