Um serviço do Kubernetes é uma abstração que permite expor um conjunto de pods como uma única entidade. Os serviços são elementos básicos para expor e gerenciar aplicativos conteinerizados em um cluster do Kubernetes. Os serviços neste blueprint são arquitetados de maneira padronizada, considerando os namespaces, a identidade, a exposição de serviços e a comunicação entre serviços.
Namespaces
Cada namespace tem o próprio conjunto de recursos, como pods, serviços e implantações. Os namespaces permitem organizar os aplicativos e isolá-los uns dos outros. O blueprint usa namespaces para agrupar serviços de acordo com a finalidade. Por exemplo, é possível criar um namespace para todos os serviços de front-end e um namespace para os serviços de back-end. Esse agrupamento facilita o gerenciamento e o controle do acesso aos serviços.
Exposição do serviço
Um serviço é exposto à Internet por meio do controlador de gateway do GKE. O controlador de gateway do GKE cria um balanceador de carga usando o Cloud Load Balancing em uma configuração com vários clusters e regiões. O Cloud Load Balancing usa a infraestrutura de rede do Google para fornecer ao serviço um endereço IP anycast que permite acesso de baixa latência ao serviço. O acesso do cliente ao serviço é feito por conexões HTTPS, e as solicitações HTTP do cliente são redirecionadas para HTTPS. O balanceador de carga usa o Gerenciador de certificados para administrar certificados públicos. Os serviços também são protegidos pelo Cloud Armour e pelo Cloud CDN. O diagrama a seguir mostra como os serviços são expostos à Internet.
Cloud Service Mesh
O blueprint usa o Cloud Service Mesh para autenticação e autorização mútuas em todas as comunicações entre serviços. Para essa implantação, o Cloud Service Mesh usa o Serviço de CA para emitir certificados TLS a fim de autenticar pares e ajudar a garantir que somente clientes autorizados podem acessar um serviço. O uso de TLS mútuo (mTLS) para autenticação também ajuda a garantir que todas as comunicações TCP entre serviços sejam criptografadas em trânsito. Para o tráfego de entrada de serviço na malha de serviço, o blueprint usa o controlador de gateway do GKE.
Serviços distribuídos
Um serviço distribuído é uma abstração de um serviço do Kubernetes que é executado no mesmo namespace 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 íntegros restantes possam atender à carga. Para criar um serviço distribuído nos clusters, o Cloud Service Mesh fornece conectividade das camadas 4 e 7 entre os serviços de um aplicativo em todos os clusters do ambiente. Essa conectividade permite que os serviços do Kubernetes em vários clusters atuem como um único serviço lógico. O tráfego entre clusters só será roteado 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 em execução no GKE têm identidades associadas a eles. O blueprint configura a Federação de identidade da carga de trabalho para GKE para permitir que uma conta de serviço do Kubernetes aja como uma conta de serviço do Google Cloud. Cada instância de um serviço distribuído no mesmo ambiente tem uma identidade comum, o que simplifica o gerenciamento de permissões. Ao acessar as APIs do Google Cloud, os serviços executados como a conta de serviço do Kubernetes são autenticados automaticamente como a conta de serviço do Google Cloud. Cada serviço tem apenas as permissões mínimas necessárias para que ele funcione.
A seguir
- Leia sobre geração de registros e monitoramento (próximo documento desta série).