Um serviço do Kubernetes é uma abstração que lhe permite expor um conjunto de pods como uma única entidade. Os serviços são componentes fundamentais para expor e gerir aplicações em contentores num cluster do Kubernetes. Os serviços neste projeto são arquitetados de forma padronizada tendo em conta os espaços de nomes, a identidade, a exposição de serviços e a comunicação entre serviços.
Espaços de nomes
Cada espaço de nomes tem o seu próprio conjunto de recursos, como pods, serviços e implementações. Os espaços de nomes permitem-lhe organizar as suas aplicações e isolá-las umas das outras. O projeto usa espaços de nomes para agrupar os serviços pela respetiva finalidade. Por exemplo, pode criar um espaço de nomes para todos os seus serviços de front-end e um espaço de nomes para os seus serviços de back-end. Este agrupamento facilita a gestão dos seus serviços e o controlo do acesso aos mesmos.
Exposição de serviços
Um serviço é exposto à Internet através do GKE Gateway Controller. O controlador do GKE Gateway cria um equilibrador de carga através do Cloud Load Balancing numa configuração de vários clusters e várias regiões. O Cloud Load Balancing usa a infraestrutura de rede da Google para fornecer ao serviço um endereço IP Anycast que permite o acesso de baixa latência ao serviço. O acesso do cliente ao serviço é feito através de ligações HTTPS, e os pedidos HTTP do cliente são redirecionados para HTTPS. O balanceador de carga usa o gestor de certificados para gerir certificados públicos. Os serviços estão ainda mais protegidos pelo Cloud Armor e pelo Cloud CDN. O diagrama seguinte mostra como os serviços são expostos à Internet.
Cloud Service Mesh
O projeto usa o Cloud Service Mesh para a autenticação e autorização mútua de todas as comunicações entre serviços. Para esta implementação, o Cloud Service Mesh usa o serviço de AC para emitir certificados TLS para autenticar pares e ajudar a garantir que apenas os clientes autorizados podem aceder a um serviço. A utilização do TLS mútuo (mTLS) para a autenticação também ajuda a garantir que todas as comunicações TCP entre serviços são encriptadas em trânsito. Para o tráfego de entrada de serviços na malha de serviços, o projeto usa o controlador do gateway do GKE.
Serviços distribuídos
Um serviço distribuído é uma abstração de um serviço Kubernetes que é executado no mesmo espaço de nomes em vários clusters. Um serviço distribuído permanece disponível mesmo que um ou mais clusters do GKE estejam indisponíveis, desde que os clusters restantes em bom estado de funcionamento consigam publicar a carga. Para criar um serviço distribuído em vários clusters, o Cloud Service Mesh oferece conetividade de camada 4 e camada 7 entre os serviços de uma aplicação em todos os clusters no ambiente. Esta conetividade permite que os serviços Kubernetes em vários clusters atuem como um único serviço lógico. O tráfego entre clusters só é encaminhado para outra região se o tráfego intrarregional não puder ocorrer devido a uma falha regional.
Identidade do serviço
Os serviços executados no GKE têm identidades associadas. A planta configura a federação de identidades da carga de trabalho para o GKE para permitir que uma conta de serviço do Kubernetes atue como uma Google Cloud conta de serviço. Cada instância de um serviço distribuído no mesmo ambiente tem uma identidade comum que simplifica a gestão de autorizações. Quando acedem às APIs Google Cloud, os serviços executados como a conta de serviço do Kubernetes autenticam-se automaticamente como a Google Cloud conta de serviço. Cada serviço tem apenas as autorizações mínimas necessárias para o serviço funcionar.
O que se segue?
- Leia acerca do registo e da monitorização (documento seguinte nesta série).