Criar um ConfigMap ou Secret genérico a partir de pares chave-valor da linha de comando.
→Use `kubectl create configmap <name> --from-literal=<key>=<value>` ou `kubectl create secret generic <name> --from-literal=<key>=<value>`.
Por quê: `--from-literal` é para entrada direta de chave-valor. Use a flag várias vezes para múltiplas chaves. Isso é mais rápido do que criar um arquivo YAML para casos simples.
Referência↗
Injetar todos os pares chave-valor de um ConfigMap ou Secret como variáveis de ambiente em um container.
→Na especificação do container, use `envFrom` com `configMapRef` ou `secretRef`. Exemplo: `envFrom: [{configMapRef: {name: my-config}}]`.
Por quê: `envFrom` é uma operação em massa que mapeia todas as chaves da origem para variáveis de ambiente. Isso evita listar cada chave manualmente.
Referência↗
Injetar um único valor específico de um ConfigMap ou Secret como uma variável de ambiente.
→Use `env.valueFrom`. Exemplo: `env: [{name: LOG_LEVEL, valueFrom: {configMapKeyRef: {name: my-config, key: log_level}}}]`.
Por quê: `valueFrom` oferece injeção seletiva e permite mapear a chave de origem para um nome de variável de ambiente diferente.
Montar um ConfigMap ou Secret como arquivos em um Pod, permitindo atualizações em tempo real.
→Defina um `volume` do tipo `configMap` ou `secret`. Monte-o no container usando `volumeMounts`. Os arquivos serão nomeados de acordo com as chaves.
Por quê: Os arquivos montados de ConfigMaps/Secrets são atualizados automaticamente quando a origem muda. As variáveis de ambiente não são, exigindo um reinício do Pod.
Referência↗
Aplicar as melhores práticas de segurança: impedir a execução como root, tornar o sistema de arquivos root somente leitura ou especificar um ID de usuário.
→Use `securityContext` no nível do Pod ou do container. Defina `runAsNonRoot: true`, `readOnlyRootFilesystem: true` e/ou `runAsUser: <UID>`.
Por quê: SecurityContext oferece controle declarativo e granular sobre os privilégios do container, essencial para fortalecer aplicações e atender às políticas de segurança.
Referência↗
Conceder a um Pod permissões mínimas para acessar a Kubernetes API.
→1. Crie um `ServiceAccount` personalizado. 2. Crie um `Role` com apenas as permissões de API necessárias (ex: listar pods). 3. Crie um `RoleBinding` para vincular o ServiceAccount e o Role. 4. Atribua o ServiceAccount ao Pod via `spec.serviceAccountName`.
Por quê: Segue o princípio do menor privilégio, minimizando a superfície de ataque caso um Pod seja comprometido.
Impedir a montagem automática de um token de ServiceAccount em um Pod que não precisa de acesso à API.
→Defina `automountServiceAccountToken: false` na especificação do Pod ou no próprio ServiceAccount.
Por quê: Reduz a superfície de ataque ao não fornecer credenciais de API a containers que não as exigem.
Criar um Secret para uso em terminação TLS para um Ingress ou outro serviço seguro.
→Use `kubectl create secret tls <secret-name> --cert=<path/to/cert.pem> --key=<path/to/key.pem>`.
Por quê: Isso cria um Secret do tipo correto `kubernetes.io/tls` com as chaves de dados padrão `tls.crt` e `tls.key` esperadas pelos Ingress controllers.
Expor metadados do Pod (como nome, namespace, labels ou IP do nó) a um container.
→Use a Downward API para projetar metadados como variáveis de ambiente ou arquivos em um volume `downwardAPI`. Exemplo: `valueFrom: {fieldRef: {fieldPath: metadata.name}}`.
Por quê: Permite que os containers sejam autoconscientes sem precisar consultar a Kubernetes API, simplificando a configuração e reduzindo os requisitos de RBAC.
Referência↗
Definir solicitações e limites padrão de CPU/memória para todos os Pods em um namespace.
→Crie um objeto `LimitRange` no namespace. Defina os valores `default` e `defaultRequest` para os recursos.
Por quê: Garante que todos os Pods tenham restrições de recursos, melhorando o agendamento e a estabilidade, mesmo que os desenvolvedores se esqueçam de especificá-los. Funciona em conjunto com ResourceQuota.
Limitar a quantidade total de recursos (CPU, memória, contagem de objetos) que podem ser consumidos em um namespace.
→Crie um objeto `ResourceQuota`. Defina limites rígidos em `spec.hard`, por exemplo, `requests.cpu: "4"`, `pods: "10"`.
Por quê: Impede que um namespace ou equipe consuma todos os recursos do cluster, garantindo uma alocação justa de recursos.