Aprendendo sobre a arquitetura e o isolamento de carga de trabalho do Code Engine
O IBM Cloud® Code Engine é a plataforma abrangente da IBM Cloud que unifica as imagens de contêiner, os apps de 12 fatores, as funções e as tarefas em lote. Ele é um sistema de diversos locatários que consiste em três grandes blocos de construção: um plano de controle, um (conjunto de) shard (ou shards) e uma camada de roteamento. O plano de controle e os shards são realizados como clusters Kubernetes multizona separados. O diagrama a seguir dá uma visão geral gráfica da arquitetura.
O Code Engine é baseado em clusters do IBM Cloud Kubernetes Service e depende dos componentes e do isolamento de carga de trabalho do IBM Cloud Kubernetes Service. Para obter mais informações, consulte arquitetura de cluster da VPC do IBM Cloud Kubernetes Service.
Todos os componentes são gerenciados e pertencentes à IBM e executados na conta da IBM Cloud. Cada cluster está em execução em sua própria VPC e separado de outros clusters.
O plano de controle do Code Engine executa os componentes que são compartilhados entre todos os usuários do Code Engine e tornam o cluster Kubernetes um verdadeiro sistema de diversos locatários. O plano de controle consiste em quatro microsserviços que são implementados nele.
| Componente | Propósito |
|---|---|
| Broker de recurso | Cria e exclui recursos do projeto do Code Engine no controlador de recurso da IBM Cloud e solicita o posicionamento do projeto em um shard. |
| Controlador de posicionamento de projeto | Seleciona um shard e solicita a criação, a exclusão e o isolamento do projeto no shard. |
| Servidor de API | Fornece as informações de destino (arquivo KUBECONFIG) para o projeto selecionado. Ele também executa verificações de política de acesso do IAM e grava registros de auditoria. |
Kube API proxy |
Executa proxy de cada solicitação de API para o cluster de shard adequado, executa verificações de política do IAM e grava registros de auditoria. |
Os shards estão executando a carga de trabalho do cliente, como construções, tarefas em lote ou apps. Portanto, o cluster de shard executa os microsserviços a seguir para controlar as cargas de trabalho do cliente.
| Componente | Propósito |
|---|---|
| Controlador de isolamento do projeto | Gerencia e isola o namespace do Kubernetes correspondente ao recurso do projeto do Code Engine. Ele monitora e assegura os aspectos de isolamento, como o controle de acesso baseado na função (RBAC), as políticas de segurança de pod e a cota de recurso. Além disso, as políticas de rede são aplicadas. |
| Controlador de certificados e domínio do projeto | Gerencia o domínio e os certificados para o terminal de rota do projeto. O terminal consiste em uma entrada do DNS e um certificado curinga. |
| Knative e Istio | Gerencie o ciclo de vida dos aplicativos. O Knative é responsável pelo ajuste de escala do aplicativo. O Istio é responsável por rotear o tráfego para a revisão e o contêiner adequados do aplicativo. |
| Controlador de lote | Gerencia o ciclo de vida e os contêineres para tarefas e execuções de tarefa. |
| Controlador de compilação | Gerencia o ciclo de vida e os contêineres para construções e execuções de compilação. |
| Ligação de serviços e operador da IBM Cloud | Gerencie o ciclo de vida de segredos que estão associados a ligações de serviços da IBM Cloud para aplicativos e tarefas. |
| Controlador de origem de eventos do IBM Cloud Object Storage | Gerencie o ciclo de vida de inscrições de evento por meio do serviço do IBM Cloud Object Storage. |
| Escalador automático do nó do cluster | Escala o shard incluindo e removendo nós do trabalhador com base na demanda de capacidade. |
| IBM Cloud Monitoring | Envia métricas de serviço para o IBM Cloud Monitoring. Para obter mais informações sobre essas métricas, consulte Monitoramento para o Code Engine. |
| IBM® Cloud Logs | Encaminhe logs e métricas de plataforma para o IBM Cloud Logs. Para obter mais informações, consulte Eventos de auditoria para o Code Engine. |
Isolamento de carga de trabalho do Code Engine
O Code Engine é um serviço regional multilocatário em que os locatários compartilham a mesma rede e infraestrutura de computação. Em particular, a infraestrutura de rede e de computação são recursos compartilhados e alguns componentes de gerenciamento são comuns a todos os locatários. O Code Engine implementa os controles a seguir para separar locatários:
- Os recursos do projeto Code Engine são separados dentro de um ambiente Kubernetes protegido que está sendo executado em uma região com várias zonas IBM Cloud.
- Os projetos do Code Engine e os seus recursos de conteúdo, como aplicativos, construções e tarefas que são executados em clusters compartilhados que usam componentes de gerenciamento compartilhados.
- Para separar o acesso aos recursos do projeto, o Code Engine executa vários níveis de verificações de autenticação e autorização dentro dos componentes
apiserverekube-api-proxy(ver tabela anterior),- As verificações de políticas de autenticação e de acesso do IAM são executadas em um nível de projeto.
- Para gerenciar o acesso de diversos locatários à API de Kubernetes subjacente, o acesso direto ao servidor de API não é permitido. Em vez disso, use a API
Kube-api-proxycustomizada do Code Engine para acessar. - As verificações de controle de acesso baseadas em função são executadas em um nível de recursos para permitir que somente usuários autorizados executem determinadas operações em recursos do projeto.
- A autorização é controlada pelo cliente, designando funções de
manager,readerouwriterpara usuários para um recurso do projeto do Code Engine dentro do IAM. - Para restringir a carga de trabalho do cliente, o Code Engine reforça os conceitos a seguir,
- Isolamento de contêiner por meio de várias técnicas de isolamento do Linux. Essas técnicas garantem várias camadas de segurança para evitar a escalada de privilégio de contêineres e para restringir os contêineres a usarem um conjunto limitado de privilégios no sistema.
- Cota de recurso e
LimitRangepara evitar o consumo excessivo de recurso. - Políticas de rede para controlar os fluxos de rede dentro do ambiente.
- Os componentes de diversos locatários compartilhados são assegurados, por exemplo, desativando a consulta reversa em
KubeDNS. - Para limitar o raio de explosão, cada cluster de shard está em execução em sua própria VPC, que é isolada de outras VPCs de shard.
- A proteção DDOS é ativada automaticamente para todos os terminais, incluindo aplicativos de cliente, por meio do Cloud Internet Services (CIS) sem nenhum custo adicional. DDoS a proteção abrange ataques ao protocolo de Camada 3 e Camada 4 (TCP/IP) da Interconexão de Sistemas (OSI), mas não ataques à Camada 7 ( HTTP ). Consulte DDoS protection.
- Se você precisar de regras de firewall de aplicativo da Web (WAF), configure sua própria instância IBM Cloud Internet Services ( CIS ) ou um serviço de gateway de terceiros com um domínio personalizado na frente dos pontos de extremidade Code Engine e ative um firewall de aplicativo da Web nessa instância.