As pipelines CI/CD aprimoram o processo de entrega de software automatizando estágios chave como teste, varredura de segurança e implantação. Adotar um fluxo de trabalho baseado em pipelines permite enviar mais rapidamente passando todo o código por um conjunto consistente de etapas, garantindo a adesão aos padrões necessários.
O maior sucesso em CI/CD é observado quando se combina o conjunto correto de ferramentas para a situação da sua equipe. Com tantas plataformas disponíveis, pode ser um desafio selecionar a solução ideal.
Neste artigo, você aprenderá algumas melhores práticas e técnicas para gerenciar pipelines CI/CD com o Kubernetes. Você pode usar essas estratégias para automatizar implantações diretamente em seus clusters de produção. Vamos mergulhar!
Melhores Práticas para CI/CD e Kubernetes
Kubernetes é o principal orquestrador de contêineres para implantação, escalabilidade e administração de cargas de trabalho em contêineres em produção. Mas como essas cargas de trabalho chegam ao seu cluster? Criá-las manualmente executando comandos do terminal Kubectl é ineficiente e propenso a erros.
Usar pipelines CI/CD com Kubernetes permite que você implante automaticamente aplicações sempre que seu código-fonte for alterado. Você pode melhorar a experiência de gerenciamento do Kubernetes automatizando tarefas chave. CI/CD também oferece uma oportunidade para verificar se novas implantações atendem aos padrões que você espera, como passar em sua suíte de testes e estar livre de problemas de segurança.
No entanto, a integração do Kubernetes em fluxos de trabalho CI/CD pode criar novos problemas. Administradores de cluster muitas vezes lutam para ver o que está realmente sendo executado em seus ambientes, enquanto o endereçamento de falhas de implantação pode ser demorado. Integrações também são potenciais riscos de segurança, já que comprometer seu provedor CI/CD poderia permitir que invasores acessem seus clusters.
Veja como você pode abordar essas desvantagens para combinar CI/CD e Kubernetes com confiança.
7 Melhores Práticas para CI/CD e Kubernetes em tópicos:
- Use GitOps
- Escaneie suas Imagens de Contêiner
- Use Helm para Gerenciar Implantações
- Garanta que Há um Mecanismo de Rollback
- Use Tags de Imagem Imutáveis
- Siga as Melhores Práticas de Segurança do Kubernetes
- Experimente Fluxos de Trabalho CI/CD Baseados em Pull
1. Use GitOps
O termo GitOps refere-se à prática de manter sua configuração de infraestrutura como arquivos em seu repositório de controle de fonte. Gerenciar tudo com Git garante que cada recurso essencial seja versionado. Isso também significa que você pode referenciar qualquer recurso em suas pipelines, para que possa verificar a validade de sua configuração e identificar rapidamente quaisquer erros.
Acionar pipelines manualmente a partir de sistemas externos é pouco confiável e propenso a erros. Usar o Git para executar uma pipeline cada vez que você faz um commit garante que as alterações não possam passar despercebidas para a produção. Se você precisar reverter uma implantação, pode fazer o checkout de um commit mais antigo e reproduzir a pipeline.
2. Escaneie suas Imagens de Contêiner
Implantar imagens de contêiner diretamente no Kubernetes é um risco de segurança. Suas imagens podem incluir vulnerabilidades zero-day, segredos codificados acidentalmente, ou um pacote malicioso que entrou em sua cadeia de fornecimento.
Para se manter seguro, você pode usar sua pipeline para realizar varreduras de vulnerabilidade de imagem. Abortar o restante da pipeline se for encontrado um defeito. Isso evitará que novas vulnerabilidades sejam silenciosamente empurradas para o seu cluster.
Você pode usar ferramentas como Snyk para gerar seus relatórios. Snyk também alimenta o comando docker scan que está integrado no CLI do Docker.
3. Use Helm para Gerenciar Implantações
Aplicar manifestos do Kubernetes individualmente é problemático porque os arquivos podem ser negligenciados. Empacotar suas aplicações como gráficos Helm permite que você versione seus manifestos e repita facilmente as implantações em diferentes ambientes. Helm rastreia o estado de cada implantação como um “release” em seu cluster.
Helm também simplifica o gerenciamento de configuração. Você pode fornecer facilmente variáveis ao instalar seus gráficos, usando arquivos YAML ou como argumentos de linha de comando. Isso permite que você substitua convenientemente variáveis específicas em seus scripts de pipeline.
4. Garanta que Há um Mecanismo de Rollback (E teste para confirmar o funcionamento)
As pipelines de entrega contínua (CD) são ótimas até quebrarem. Quando isso acontece no Kubernetes, pode ser incerto como proceder. Sua implantação pode estar presa em um estado falho, incapaz de transicionar para o novo desejado.
Certifique-se de ter uma estratégia de rollback confiável pronta para lidar com esses eventos. Se você estiver usando GitOps, deve ser capaz de reverter para um commit anterior, executando sua pipeline novamente. A antiga revisão será nova novamente, permitindo que ela substitua o estado ruim em seu cluster.
Cargas de trabalho com estado, como bancos de dados, podem precisar de etapas adicionais caso a implantação falha tenha migrado parcialmente alguns dados enquanto deixava outros componentes presos na versão antiga. Sua estratégia de rollback deve ser capaz de preservar e restaurar dados persistentes quando necessário. Finalmente, certifique-se de que seu sistema de rollback realmente funciona – muitas equipes só descobrem bugs em seus scripts de rollback durante incidentes reais.
5. Use Tags de Imagem Imutáveis
A imutabilidade das tags de imagem torna suas implantações reproduzíveis e ajuda a permitir rollbacks resilientes. Sempre implantar my-app:latest é perigoso porque a imagem exata que é selecionada pode mudar cada vez.
É muito mais seguro marcar exclusivamente cada imagem que você constrói. Usar um SHA de commit truncado é uma estratégia popular, resultando em tags como my-app:0ab43f. Isso permite que você faça referência cruzada de commits com os artefatos de imagem e implantações que eles criam. Se você precisar de um rollback, pode modificar sua implantação do Kubernetes para se referir à imagem construída a partir do commit anterior.
6. Siga as Melhores Práticas de Segurança do Kubernetes
É importante continuar seguindo as práticas de segurança padrão do Kubernetes quando você está integrando seus clusters com as plataformas CI/CD. Proteja seu ambiente habilitando a criptografia etcd, configurando permissões RBAC precisas para suas contas de usuário CI/CD, e garantindo que quaisquer valores de configuração sensíveis sejam adicionados aos segredos em vez de ConfigMaps simples.
Você deve verificar se sua plataforma CI/CD expõe suas conexões de cluster apenas para projetos e usuários que você autorizou especificamente. Lembre-se de que qualquer pessoa que possa se comprometer com seu projeto poderia enviar código malicioso através da pipeline para seu cluster Kubernetes.
7. Experimente Fluxos de Trabalho CI/CD Baseados em Pull
Existem duas maneiras principais de conectar sistemas CI/CD ao Kubernetes:
Fluxos de trabalho baseados em push confiam na plataforma CI/CD sendo fornecida com certificados e credenciais que a permitem alcançar seu cluster Kubernetes. Em seguida, você usa ferramentas familiares como Kubectl e Helm para fazer push de alterações para o Kubernetes de fora. Fluxos de trabalho baseados em pull executam uma utilidade de agente dentro do cluster. O agente recebe credenciais para seu sistema de controle de origem. Seu acesso deve ser delimitado apenas aos projetos que precisa implantar. O agente periodicamente procura por alterações e as puxa para o cluster. Isso inverte o modelo baseado em push. CI/CD baseado em pull é cada vez mais popular porque proporciona uma proteção mais forte para o seu cluster. Para ser eficaz, os fluxos de trabalho baseados em push exigem que as credenciais privilegiadas do Kubernetes sejam armazenadas em seu servidor de controle de origem. Se o servidor for comprometido, os invasores poderiam roubar as credenciais, acessar seu cluster e realizar ações arbitrárias. Com um fluxo de trabalho baseado em pull, os ataques contra a plataforma CI/CD não concederão acesso a todo o seu cluster.
Ferramentas para um CI/CD Efetivo com Kubernetes
Lembre-se da importância de ter capacidades de rollback confiáveis e uma abordagem de segurança que isola seu cluster do seu sistema de controle de versão. Sempre adote às melhores práticas de segurança do Kubernetes para garantir que suas implantações se mantenham seguras.
Lembre-se de continuar aprendendo. O cenário de ferramentas e práticas para Kubernetes e CI/CD está continuamente evoluindo. Fique atento às últimas notícias e esteja pronto para adaptar suas ferramentas e fluxos de trabalho conforme necessário.
Sou um profissional na área de Tecnologia da informação, especializado em monitoramento de ambientes, Sysadmin e na cultura DevOps. Possuo certificações de Segurança, AWS e Zabbix.