Control Plane
Tomam decisões globais sobre o cluster, detectam e respondem aos eventos do cluster.
Kube-apiserver: É o núcleo do Kubernetes. Ele desempenha um papel fundamental ao gerenciar a gravação no banco de dados, garantindo a validação e configuração adequadas dos dados para os objetos da API, como pods, serviços e controladores de replicação. Além disso, ele facilita o balanceamento de carga e tráfego entre as instâncias, fornecendo uma interface centralizada para o cluster que permite a interação entre todos os componentes do sistema.
Kube-scheduler: É encarregado de distribuir os pods nos nós para execução. Ele leva em consideração as especificações de afinidade e anti-afinidade, além de analisar fatores como interferências de cargas de trabalho, prazos e outros critérios. Esse processo permite identificar o nó mais adequado para alocar o container, levando em conta a disponibilidade e otimizando os recursos. Suas decisões são baseadas em requisitos individuais e coletivos de recursos, restrições de hardware e software, políticas, afinidades e anti-afinidades, localização de dados, interferências entre cargas de trabalho e prazos.
ETCD: É o tipo de armazenamento. Responsável pelo armazenamento de dados relacionados ao cluster. É um aramá e ameno do tipo chave valor consistente e de alta disponibilidade, usado como armazenamento de apoio do kubernetes.
Kube-controller-manager: Executa os processos do controlador. Apesar de cada controlador estar em um processo separado, eles são complicados e executam em um único processo. Controladores: de nó, de jobs, de endpointslice, service account.
Cloud-controller-manager: Executa os controladores kubernets que estão na nuvem. É possível gerenciar o controle da nuvem, escalonando horizontalmente e garantindo a interação com o cluster. É possível gerenciar os nós. Permite vincular o cluster na API do seu provedor de nuvem e separar os componentes que apenas interagem com seu cluster. Executa apenas controladores que são específicos para seu provedor de nuvem. Controladores: de nó, de rota, de serviço.
Node Components
Componentes são executados em todos os nós, mantendo os pods em execução e fornecendo o ambiente de execução do kubernetes.
Kubelet: É um dos componentes cruciais dos nós em um cluster Kubernetes. Ele garante a execução eficiente de todos os containers atribuídos a um pod específico. No entanto, vale ressaltar que o Kubelet não gerencia containers que não foram criados pelo próprio Kubernetes, concentrando-se exclusivamente na gestão e supervisão dos containers que fazem parte da estrutura Kubernetes.
Kube-proxy: É um proxy de rede que opera em cada nó do cluster Kubernetes. Ele desempenha um papel fundamental na implementação do conceito de serviço dentro do Kubernetes, gerenciando e mantendo regras de rede nos nós. Essas regras permitem que os pods se comuniquem eficientemente com sessões de rede dentro ou fora do cluster. Além disso, o Kube-proxy aproveita a camada de filtragem de pacotes do sistema operacional, se disponível, para otimizar a conectividade de rede e garantir uma comunicação confiável entre os componentes do cluster.
Security
Estratégia de segurança adotada pelo Kubernetes
Proteção do plano de controle: Uma prática imprescindível para qualquer cluster Kubernetes é controlar o acesso à API. É esperado que você configure e use TLS para fornecer criptografia de dados em trânsito dentro do plano de controle e entre o plano de controle e seus clientes. Também é possível habilitar a criptografia em repouso para os dados armazenados dentro do plano de controle do Kubernetes.
Secrets: A API Secret oferece proteção básica para valores de configuração que exigem confidencialidade.
Proteção de Workloads: Padrões de segurança de Pods devem ser aplicados para garantir que os Pods e seus containers estejam adequadamente isolados. Classes de Runtime podem ser usadas para definir isolamento personalizado, se necessário. Políticas de rede permitem controlar o tráfego entre Pods ou entre Pods e a rede externa ao cluster.
Auditoria: O registro de auditoria do Kubernetes documenta a sequência de ações em um cluster, registrando atividades de usuários, aplicativos que utilizam a API do Kubernetes e do próprio plano de controle. Políticas de segurança podem ser definidas usando mecanismos nativos do Kubernetes, como NetworkPolicy e ValidatingAdmissionPolicy. Além disso, é possível utilizar implementações de políticas do ecossistema mais amplo, que oferecem mecanismos de extensão para controles de revisão de código-fonte, aprovação de imagens de containers, controle de acesso à API e rede, entre outros.
Networking
Modelos de comunicação entre unidades do Kubernetes.
Container-to-Container: Comunicação entre contêineres, é necessário que possuam um mesmo namespace - endereço de ambiente isolado dentro de um determinado cluster - e que compartilhem um IP comum.
Pod-to-Pod: Comunicação entre Pods, o próprio nome já diz. Um detalhe importante é que, como Pods são efêmeros, é alocado um único ClusterIP para estender essa “vida útil”
Pod-to-Service: Comunicação entre Pod e Serviço. Existe para além do tempo de vida do POD, é gerenciado pelo kube-proxy e também usa um único ClusterIP
External-to-Service: Comunicação externa ao cluster, é feita através de um LoadBalancer.