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.

Dicas para Configurar Contêineres

Executar contêineres bem construídos pode impactar significativamente o desempenho e a segurança geral do seu ambiente.

Abaixo estão algumas dicas para configurar seus contêineres.

Para uma discussão mais detalhada sobre segurança para contêineres, você também pode consultar o Guia de Segurança de Contêineres do Rancher.

Use um Sistema Operacional Comum para contêineres

Sempre que possível, você deve tentar padronizar um sistema operacional base comum para contêineres.

Distribuições menores, como Alpine e BusyBox, reduzem o tamanho da imagem do contêiner e geralmente têm uma superfície de ataque/vulnerabilidade menor.

Distribuições populares, como Ubuntu, Fedora e CentOS, são mais testadas em campo e oferecem mais funcionalidade.

Comece com um contêiner FROM scratch

Se seu microsserviço for um binário estático autônomo, você deve usar um contêiner FROM scratch.

O contêiner FROM scratch é uma imagem oficial do Docker que está vazia, para que você possa usá-la para projetar imagens mínimas.

Isso terá a menor superfície de ataque e o menor tamanho de imagem.

Execute processos de contêiner sem privilégios

Sempre que possível, use um usuário não privilegiado ao executar processos dentro do seu contêiner. Embora o tempo de execução do contêiner forneça isolamento, vulnerabilidades e ataques ainda são possíveis. Montagens de host inadvertidas ou acidentais também podem ser impactadas se o contêiner estiver sendo executado como root. Para detalhes sobre como configurar um contexto de segurança para um pod ou contêiner, consulte a documentação do Kubernetes.

Defina Limites de Recursos

Aplique limites de CPU e memória aos seus pods. Isso pode ajudar a gerenciar os recursos em seus nós de trabalho e evitar que um microserviço com falha impacte outros microserviços.

No Kubernetes padrão, você pode definir limites de recursos no nível do namespace. No Rancher, você pode definir limites de recursos no nível do projeto e eles serão propagados para todos os namespaces dentro do projeto. Para mais detalhes, consulte a documentação do Rancher.

Ao definir cotas de recursos, se você definir qualquer coisa relacionada a CPU ou Memória (ou seja, limites ou reservas) em um projeto ou namespace, todos os contêineres precisarão de um campo de CPU ou Memória correspondente definido durante a criação. Para evitar definir esses limites em cada contêiner durante a criação da carga de trabalho, um limite de recursos padrão para contêineres pode ser especificado no namespace.

A documentação do Kubernetes tem mais informações sobre como os limites de recursos podem ser definidos no nível do contêiner e no nível do namespace.

Defina Requisitos de Recursos

Você deve aplicar requisitos de CPU e memória aos seus pods. Isso é crucial para informar ao agendador em qual tipo de nó de computação seu pod precisa ser colocado, e garantir que ele não sobrecarregue esse nó. No Kubernetes, você pode definir um requisito de recurso definindo resources.requests no campo de solicitações de recursos na especificação do contêiner de um pod. Para mais detalhes, consulte a documentação do Kubernetes.

Se você definir um limite de recursos para o namespace em que o pod está implantado, e o contêiner não tiver uma solicitação de recurso específica, o pod não poderá ser iniciado. Para evitar definir esses campos em cada contêiner durante a criação da carga de trabalho, um limite de recursos padrão para contêineres pode ser especificado no namespace.

É recomendável definir requisitos de recursos no nível do contêiner porque, caso contrário, o agendador faz suposições que provavelmente não serão úteis para seu aplicativo quando o cluster estiver sob carga.

Liveness e Readiness Probes

Configure liveness e readiness probes para seu contêiner. A menos que seu contêiner falhe completamente, o Kubernetes não saberá que está com problemas de saúde, a menos que você crie um endpoint ou mecanismo que possa relatar o status do contêiner. Alternativamente, certifique-se de que seu contêiner pare e falhe se estiver com problemas de saúde.

A documentação do Kubernetes mostra como configurar liveness e readiness probes para contêineres.