Metodologia de implementação

Last reviewed 2024-12-13 UTC

O projeto de aplicação empresarial é implementado através de uma série de sistemas e pipelines automatizados. Cada pipeline implementa um aspeto específico do projeto. Os pipelines oferecem um mecanismo controlável, auditável e repetível para criar o plano. O diagrama seguinte mostra a interação dos vários pipelines, repositórios e perfis fictícios.

Pipelines de Blueprints.

O plano usa os seguintes pipelines:

  • O pipeline de infraestrutura de base (parte do projeto de base empresarial) implementa a fábrica de aplicações, o pipeline de infraestrutura multiinquilino e o pipeline de âmbito da frota.
  • O pipeline de infraestrutura multiinquilino implementa os clusters do GKE e os outros serviços geridos nos quais o esquema da aplicação empresarial se baseia.
  • A configuração do pipeline ao nível da frota configura âmbitos da frota, espaços de nomes e funções e associações de RBAC.
  • A fábrica de aplicações oferece um mecanismo para implementar novos pipelines de aplicações através de um processo baseado em modelos.
  • O pipeline de CI/CD da aplicação fornece um pipeline de CI/CD para implementar serviços em clusters do GKE.
  • A sincronização de configurações implementa e mantém configurações adicionais do Kubernetes, incluindo restrições do Policy Controller.

Repositórios, colaboradores do repositório e aprovadores de alterações do repositório

Os pipelines de planos são acionados através de alterações aos repositórios Git. A tabela seguinte descreve os repositórios usados em todo o projeto, quem contribui para o repositório, quem aprova alterações ao repositório, que pipeline usa o repositório e a descrição do conteúdo do repositório.

Repositório Colaborador do repositório Aprovador de alteração de repositório Fornecimento Descrição

infra

Programador da plataforma para programadores

Administrador da plataforma para programadores

Pipeline de infraestrutura de base

Repositório que contém o código para implementar o pipeline de infraestrutura multiinquilino, a aplicação e o pipeline de âmbito da frota

eab-infra

Programador da plataforma para programadores

Administrador da plataforma para programadores

Infraestrutura multi-inquilino

Os módulos do Terraform que são usados pelas equipas da plataforma de programadores quando criam a infraestrutura

fleet-scope

Programador da plataforma para programadores

Administrador da plataforma para programadores

Âmbito da frota

O repositório que define os âmbitos e os espaços de nomes da equipa de frota no fleet

app-factory

Programador da plataforma para programadores

Administrador da plataforma para programadores

Application factory

O código que define o repositório da aplicação e faz referência aos módulos no repositório terraform-modules

app-template

Programador de aplicações

Operador de aplicações

Application factory

O código base que é colocado no repositório app-code quando o repositório é criado pela primeira vez

terraform-modules

Programador da plataforma para programadores

Administrador da plataforma para programadores

Application factory

Infraestrutura multi-inquilino

Os módulos do Terraform que definem a aplicação e a infraestrutura

app-code

Programador de aplicações

Operador de aplicações

CI/CD de aplicações

O código da aplicação implementado nos clusters do GKE

config-policy

Programador da plataforma para programadores

Administrador da plataforma para programadores

Config Sync

As políticas usadas pelos clusters do GKE para manter as respetivas configurações

Os pipelines automatizados ajudam a incorporar segurança, capacidade de auditoria, rastreabilidade, repetibilidade, capacidade de controlo e conformidade no processo de implementação. Ao usar diferentes sistemas com diferentes autorizações e colocar diferentes pessoas em diferentes grupos operacionais, cria uma separação de responsabilidades e segue o princípio do menor privilégio.

Pipeline de infraestrutura de base

A pipeline de infraestrutura de base está descrita no projeto de base empresarial e é usada como um ponto de entrada genérico para implementações de recursos adicionais. A tabela seguinte descreve os componentes criados pelo pipeline.

Componente Descrição

Pipeline de infraestrutura multiinquilino

Cria a infraestrutura partilhada que é usada por todos os inquilinos da plataforma de programadores.

Pipeline ao nível da frota

Cria espaços de nomes e associações de funções RBAC.

Application factory

Cria os pipelines de CI/CD da aplicação que são usados para implementar os serviços.

Pipeline de infraestrutura multi-inquilino

O pipeline de infraestrutura de vários inquilinos implementa frotas, clusters do GKE e recursos partilhados relacionados. O diagrama seguinte mostra os componentes do pipeline de infraestrutura multiinquilino.

Componentes do pipeline de infraestrutura.

A tabela seguinte descreve os componentes que a pipeline de infraestrutura multilocatária cria.

Componente Descrição

Clusters do GKE

Oferece alojamento para os serviços da aplicação em contentor.

Controlador de políticas

Fornece políticas que ajudam a garantir a configuração adequada dos clusters e serviços do GKE.

Config Sync

Aplica as políticas do Policy Controller aos clusters e mantém a aplicação consistente das políticas.

Chave do Cloud Key Management Service (Cloud KMS)

Cria a chave de encriptação baseada na chave de encriptação gerida pelo cliente (CMEK) para o GKE, o AlloyDB para PostgreSQL e o Secret Manager.

Segredo do Secret Manager

Fornece um repositório secreto para o par de chaves RSA que é usado para a autenticação do utilizador com tokens Web JSON (JWT).

Política de segurança do Cloud Armor

Fornece a política usada pela firewall de aplicações Web do Cloud Armor.

Pipeline ao nível da frota

O pipeline de âmbito da frota é responsável pela configuração dos espaços de nomes e das associações RBAC nos clusters do GKE da frota. A tabela seguinte descreve os componentes que o pipeline de âmbito da frota cria.

Componente Descrição

Espaço de nomes

Define os clusters lógicos no cluster físico.

CABF (funções e associações)

Define a autorização que uma conta de serviço do Kubernetes tem ao nível do cluster ou do espaço de nomes.

Application factory

A fábrica de aplicações é implementada pelo pipeline de infraestrutura de base e é usada para criar infraestrutura para cada nova aplicação. Esta infraestrutura inclui um projeto que contém o pipeline de CI/CD da aplicação. Google Cloud

À medida que as organizações de engenharia crescem, a equipa de aplicações pode integrar novas aplicações através da fábrica de aplicações. O escalamento permite o crescimento através da adição de pipelines de CI/CD de aplicações discretas e do suporte da infraestrutura para implementar novas aplicações na arquitetura multiinquilino. O diagrama seguinte mostra a fábrica de aplicações.

Componentes da fábrica de aplicações.

A fábrica de aplicações tem os seguintes componentes:

  • Repositório da fábrica de aplicações: um repositório Git que armazena a definição declarativa da aplicação.
  • Pipelines para criar aplicações: pipelines que requerem que o Cloud Build conclua o seguinte:
    • Crie uma definição de aplicação declarativa e armazene-a no catálogo de aplicações.
    • Aplique a definição declarativa da aplicação para criar os recursos da aplicação.
  • Repositório de modelos de aplicações iniciais: modelos para criar uma aplicação simples (por exemplo, um microsserviço Python, Golang ou Java).
  • Módulos partilhados: módulos Terraform criados com práticas padrão e usados para vários fins, incluindo a integração e a implementação de aplicações.

A tabela seguinte lista os componentes que a fábrica de aplicações cria para cada aplicação.

Componente Descrição

Repositório de código-fonte da aplicação

Contém código fonte e configuração relacionada usados para criar e implementar uma aplicação específica.

Pipeline de CI/CD da aplicação

Um pipeline baseado no Cloud Build que é usado para estabelecer ligação ao repositório de código fonte e fornece um pipeline de CI/CD para implementar serviços de aplicações.

Pipeline de CI/CD da aplicação

O pipeline de CI/CD de aplicações permite a criação e a implementação automatizadas de aplicações baseadas em contentores. O pipeline consiste em passos de integração contínua (CI) e implementação contínua (CD). A arquitetura de pipeline baseia-se no projeto de CI/CD seguro.

O pipeline de CI/CD da aplicação usa imagens de contentores imutáveis em todos os seus ambientes. As imagens de contentores imutáveis ajudam a garantir que a mesma imagem é implementada em todos os ambientes e não é modificada enquanto o contentor está em execução. Se tiver de atualizar o código da aplicação ou aplicar um patch, cria uma nova imagem e volta a implementá-la. A utilização de imagens de contentores imutáveis requer que externalize a configuração do contentor para que as informações de configuração sejam lidas durante o tempo de execução.

Para alcançar clusters do GKE através de um caminho de rede privada e gerir a kubeconfig autenticação, o pipeline de CI/CD da aplicação interage com os clusters do GKE através do gateway do Connect. O pipeline também usa pools privados para o ambiente de CI/CD.

Cada repositório de código fonte da aplicação inclui configurações do Kubernetes. Estas configurações permitem que as aplicações sejam executadas com êxito como serviços do Kubernetes no GKE. A tabela seguinte descreve os tipos de configurações do Kubernetes que o pipeline de CI/CD da aplicação aplica.

Componente Descrição

Implementação

Define um conjunto dimensionado de pods (contentores).

Serviço

Torna uma implementação acessível através da rede do cluster.

Serviço virtual

Torna um serviço parte da malha de serviço.

Regra de destino

Define como os pares na malha de serviços devem alcançar um serviço virtual. Usado no projeto para configurar o equilíbrio de carga de localidade para tráfego leste-oeste.

Política de autorização

Define o controlo de acesso entre cargas de trabalho na malha de serviços.

Conta de serviço do Kubernetes

Define a identidade usada por um serviço Kubernetes. A federação de identidades da carga de trabalho para o GKE define a Google Cloud conta de serviço que é usada para aceder aos Google Cloud recursos.

Gateway

Permite que o tráfego de entrada externo alcance um serviço. O gateway só é necessário para implementações que recebem tráfego externo.

GCPBackendPolicy

Configure o SSL, o Cloud Armor, a afinidade de sessão e a drenagem de ligações para implementações que recebem tráfego externo. A GCPBackendPolicy é usada apenas por implementações que recebem tráfego externo.

PodMonitoring

Configura a recolha de métricas do Prometheus exportadas por uma aplicação.

Integração contínua

O diagrama seguinte mostra o processo de integração contínua.

Processo de integração contínua do projeto.

O processo é o seguinte:

  1. Um programador compromete o código da aplicação com o repositório de origem da aplicação. Esta operação aciona o Cloud Build para iniciar o pipeline de integração.
  2. O Cloud Build cria uma imagem de contentor, envia a imagem de contentor para o Artifact Registry e cria um resumo da imagem.
  3. O Cloud Build executa testes automáticos para a aplicação. Consoante o idioma da aplicação, podem ser realizados diferentes pacotes de testes.
  4. O Cloud Build executa as seguintes análises na imagem de contentor:
    1. O Cloud Build analisa o contentor através da estrutura Container Structure Tests. Esta estrutura executa testes de comandos, testes de existência de ficheiros, testes de conteúdo de ficheiros e testes de metadados.
    2. O Cloud Build usa a análise de vulnerabilidades para identificar vulnerabilidades na imagem do contentor em comparação com uma base de dados de vulnerabilidades mantida pela Google Cloud.
  5. O Cloud Build aprova a imagem para continuar no pipeline após resultados de análise bem-sucedidos.
  6. A autorização binária assina a imagem. A Autorização binária é um serviço no Google Cloud que oferece segurança da cadeia de fornecimento de software para aplicações baseadas em contentores através da utilização de políticas, regras, notas, atestations, attestors, e signers. No momento da implementação, o aplicador de políticas de autorização binária ajuda a garantir a proveniência do contentor antes de permitir a implementação do contentor.
  7. O Cloud Build cria um lançamento no Cloud Deploy para iniciar o processo de implementação.

Para ver as informações de segurança de uma compilação, aceda ao painel Estatísticas de segurança. Estas estatísticas incluem vulnerabilidades detetadas através da análise de artefactos e o nível de garantia de segurança da compilação indicado pelas diretrizes da SLSA.

Implementação contínua

O diagrama seguinte mostra o processo de implementação contínua.

Planeie o processo de implementação contínua.

O processo é o seguinte:

  1. No final do processo de compilação, o pipeline de CI/CD da aplicação cria um novo lançamento do Cloud Deploy para iniciar as imagens de contentores recém-criadas progressivamente em cada ambiente.
  2. O Cloud Deploy inicia uma implementação gradual no primeiro ambiente do pipeline de implementação, que é normalmente o de desenvolvimento. Cada fase de implementação está configurada para exigir aprovação manual.
  3. Os pipelines do Cloud Deploy usam a implementação sequencial para implementar imagens em cada cluster num ambiente por ordem.
  4. No final de cada fase de implementação, o Cloud Deploy valida a funcionalidade dos contentores implementados. Estes passos são configuráveis na configuração do Skaffold para as aplicações.

Implementar uma nova aplicação

O diagrama seguinte mostra como a fábrica de aplicações e o pipeline de CI/CD de aplicações funcionam em conjunto para criar e implementar uma nova aplicação.

Processo de implementação de uma aplicação.

O processo para definir uma nova aplicação é o seguinte:

  1. Um operador de aplicações define uma nova aplicação no respetivo inquilino executando um acionador do Cloud Build para gerar a definição da aplicação.
  2. O acionador adiciona uma nova entrada para a aplicação no Terraform e confirma a alteração no repositório da fábrica de aplicações.
  3. A alteração confirmada aciona a criação de repositórios e projetos específicos da aplicação.
  4. O Cloud Build conclui o seguinte:
    1. Cria dois novos repositórios Git para alojar o código fonte da aplicação e a IaC.
    2. Envia os manifestos do Kubernetes para políticas de rede e Workload Identity Federation para o GKE para o repositório de gestão de configuração.
    3. Cria o projeto de CI/CD da aplicação e o acionador de IaC do Cloud Build.
  5. O acionador de IaC do Cloud Build para a aplicação cria o pipeline de CI/CD da aplicação e o repositório do Artifact Registry no projeto de CI/CD da aplicação.
  6. O Config Sync implementa as políticas de rede e a Workload Identity Federation para configurações do GKE nos clusters do GKE multiinquilino.
  7. O pipeline de criação do âmbito da frota cria o âmbito da frota e o espaço de nomes para a aplicação em clusters do GKE multiinquilino.
  8. A pipeline de CI/CD da aplicação faz a implementação inicial da aplicação nos clusters do GKE.
  9. Opcionalmente, a equipa de aplicações usa o acionador de IaC do Cloud Build para implementar projetos e recursos adicionais (por exemplo, bases de dados e outros serviços geridos) em projetos de inquilino único dedicados, um para cada ambiente.

Gestão de políticas e configuração do GKE Enterprise

No plano, os administradores da plataforma de programadores usam a sincronização de configuração para criar configurações ao nível do cluster em cada ambiente. O Config Sync liga-se a um repositório Git que serve como fonte de verdade para o estado escolhido da configuração do cluster. O Config Sync monitoriza continuamente o estado real da configuração nos clusters e reconcilia quaisquer discrepâncias aplicando atualizações para garantir a conformidade com o estado escolhido, apesar das alterações manuais. As configurações são aplicadas aos ambientes (desenvolvimento, não produção e produção) através de uma estratégia de ramificação no repositório.

Neste esquema, o Config Sync aplica restrições do Policy Controller. Estas configurações definem os controlos de segurança e conformidade, conforme definidos pelos administradores da plataforma de programadores para a organização. Este esquema baseia-se noutros pipelines para aplicar outras configurações: os pipelines de CI/CD da aplicação aplicam a configuração específica da aplicação e o pipeline de âmbito da frota cria espaços de nomes e associações de funções associadas.

O que se segue?