Partilhar via


Aplicar atualizações automáticas de segurança aos nós do Serviço Kubernetes do Azure (AKS) usando as Ações do GitHub

As atualizações de segurança são uma parte fundamental da manutenção da segurança do cluster AKS e da conformidade com as correções mais recentes para o SO subjacente. Essas atualizações incluem correções de segurança do sistema operacional ou atualizações do kernel. Algumas atualizações exigem uma reinicialização do nó para concluir o processo.

Este artigo mostra como você pode automatizar o processo de atualização de nós AKS usando as Ações do GitHub e a CLI do Azure para criar uma tarefa de atualização com base na cron qual é executada automaticamente.

Nota

Você também pode executar atualizações de imagem de nó automaticamente e agendar essas atualizações usando a manutenção planejada. Para obter mais informações, consulte Atualizar imagens de nó automaticamente.

Antes de começar

  • Este artigo pressupõe que você tenha um cluster AKS existente. Se você precisar de um cluster AKS, crie um usando a CLI do Azure, o Azure PowerShell ou o portal do Azure.
  • Este artigo também pressupõe que você tenha uma conta do GitHub e um repositório de perfis para hospedar suas ações. Se você não tiver um repositório, crie um com o mesmo nome do seu nome de usuário do GitHub.
  • Você precisa da CLI do Azure versão 2.0.59 ou posterior instalada e configurada. Executar az --version para localizar a versão. Se precisar de instalar ou atualizar, veja Install Azure CLI (Instalar o Azure CLI).

Atualizar nós com az aks upgrade

O az aks upgrade comando oferece uma maneira zero de tempo de inatividade para aplicar atualizações. O comando executa as seguintes ações:

  1. Aplica as atualizações mais recentes a todos os nós do cluster.
  2. Cordons (torna o nó indisponível para o agendamento de novas cargas de trabalho) e drena (move as cargas de trabalho existentes para outro nó) o tráfego para os nós.
  3. Reinicia os nós.
  4. Permite que os nós atualizados recebam tráfego novamente.

O AKS não reinicia automaticamente seus nós se você atualizá-los usando um método diferente.

Nota

A execução az aks upgrade com o --node-image-only sinalizador apenas atualiza as imagens do nó. A execução do comando sem o sinalizador atualiza as imagens do nó e a versão do plano de controle do Kubernetes. Para obter mais informações, consulte os documentos para atualizações gerenciadas em nós e os documentos para atualizações de cluster.

Todos os nós do Kubernetes são executados em uma máquina virtual (VM) do Azure padrão baseada em Windows ou Linux. As VMs baseadas em Linux usam uma imagem do Ubuntu com o sistema operacional configurado para verificar automaticamente se há atualizações todas as noites.

Quando você usa o comando, a az aks upgrade CLI do Azure cria uma onda de novos nós com as atualizações de segurança e kernel mais recentes. Esses novos nós são inicialmente isolados para impedir que quaisquer aplicativos sejam agendados para eles até que a atualização seja concluída. Após a conclusão da atualização, o Azure corda e drena os nós mais antigos e descorda os novos, transferindo todos os aplicativos agendados para os novos nós.

Este processo é melhor do que atualizar kernels baseados em Linux manualmente porque o Linux requer uma reinicialização quando uma nova atualização do kernel é instalada. Se você atualizar o sistema operacional manualmente, também precisará reiniciar a VM, cordoando e drenando manualmente todos os aplicativos.

Criar uma ação cronometrada do GitHub

cron é um utilitário que permite executar um conjunto de comandos, ou trabalhos, em uma programação automatizada. Para criar um trabalho para atualizar seus nós AKS em uma programação automatizada, você precisa de um repositório para hospedar suas ações. As ações do GitHub geralmente são configuradas no mesmo repositório do seu aplicativo, mas você pode usar qualquer repositório.

  1. Navegue até o repositório no GitHub.

  2. Selecione Ações.

  3. Selecione Novo fluxo de trabalho>Configure um fluxo de trabalho você mesmo.

  4. Crie uma Ação do GitHub chamada Atualizar imagens de nó de cluster com um gatilho de agendamento para ser executado a cada 15 dias às 3 da manhã. Copie o seguinte código para o YAML:

    name: Upgrade cluster node images
    on:
      schedule:
        - cron: '0 3 */15 * *'
    
  5. Crie um trabalho chamado nó de atualização que é executado em um agente do Ubuntu e se conecta à sua conta da CLI do Azure para executar o comando de atualização do nó. Copie o seguinte código para o YAML sob a on chave:

    jobs:
      upgrade-node:
        runs-on: ubuntu-latest
    

Configurar a CLI do Azure no fluxo de trabalho

  1. Na barra Pesquisar Ações do Marketplace, procure Logon do Azure.

  2. Selecione Login do Azure.

    Resultados da pesquisa mostrando duas linhas, a primeira ação é chamada 'Logon do Azure' e a segunda 'Logon do Registro de Contêiner do Azure'

  3. Em Instalação, selecione uma versão, como v1.4.6, e copie o trecho do código de instalação.

  4. Adicione a steps chave e as seguintes informações do trecho de código de instalação ao YAML:

    name: Upgrade cluster node images
    on:
      schedule:
        - cron: '0 3 */15 * *'
    jobs:
      upgrade-node:
        runs-on: ubuntu-latest
        steps:
          - name: Azure Login
            uses: Azure/login@v1.4.6
            with:
              creds: ${{ secrets.AZURE_CREDENTIALS }}
    

Criar credenciais para a CLI do Azure

  1. Em uma nova janela do navegador, crie uma nova entidade de serviço usando o az ad sp create-for-rbac comando. Certifique-se de que substitui *{subscriptionID}* pelo seu próprio ID de subscrição.

    Nota

    Este exemplo cria a Contributor função no escopo Assinatura . Você pode fornecer a função e o escopo que atendam às suas necessidades. Para obter mais informações, consulte Funções internas do Azure e Níveis de escopo do Azure RBAC.

    az ad sp create-for-rbac --role Contributor --scopes /subscriptions/{subscriptionID} -o json
    

    Sua saída deve ser semelhante à saída de exemplo a seguir:

    {
      "appId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
      "displayName": "xxxxx-xxx-xxxx-xx-xx-xx-xx-xx",
      "password": "xxxxxxxxxxxxxxxxxxxxxxxxxxxx",
      "tenant": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
    }
    
  2. Copie a saída e navegue até o repositório GitHub.

  3. Selecione Configurações>Segredos e variáveis>Ações>Novo segredo do repositório.

  4. Em Nome, digite AZURE_CREDENTIALS.

  5. Para Secret, copie o conteúdo da saída recebida quando criou a entidade de serviço.

  6. Selecione Adicionar Segredo.

Criar as etapas para executar os comandos da CLI do Azure

  1. Navegue até a janela com o fluxo de trabalho YAML.

  2. Na barra Search Marketplace for Actions, procure Azure CLI Action.

  3. Selecione Ação da CLI do Azure.

    Resultado da pesquisa para 'Ação da CLI do Azure' com o primeiro resultado sendo mostrado como feito pelo Azure

  4. Em Instalação, selecione uma versão, como v1.0.8, e copie o trecho do código de instalação.

  5. Cole o conteúdo da ação no YAML abaixo da *Azure Login* etapa, semelhante ao exemplo a seguir:

    name: Upgrade cluster node images
    on:
      schedule:
        - cron: '0 3 */15 * *'
    jobs:
      upgrade-node:
        runs-on: ubuntu-latest
        steps:
          - name: Azure Login
            uses: Azure/login@v1.4.6
            with:
              creds: ${{ secrets.AZURE_CREDENTIALS }}
          - name: Upgrade node images
            uses: Azure/cli@v1.0.8
            with:
              inlineScript: az aks upgrade --resource-group <resourceGroupName> --name <aksClusterName> --node-image-only --yes
    

    Gorjeta

    Você pode separar os --resource-group parâmetros e --name do comando criando novos segredos de repositório como fez para AZURE_CREDENTIALSo .

    Se você criar segredos para esses parâmetros, precisará substituir os <resourceGroupName> espaços reservados e <aksClusterName> por suas contrapartes secretas. Por exemplo, ${{secrets.RESOURCE_GROUP_NAME}} e ${{secrets.AKS_CLUSTER_NAME}}

  6. Renomeie o YAML para upgrade-node-images.yml.

  7. Selecione Confirmar alterações..., adicione uma mensagem de confirmação e, em seguida, selecione Confirmar alterações.

Execute a ação do GitHub manualmente

Você pode executar o fluxo de trabalho manualmente, além da execução agendada, adicionando um novo on gatilho chamado workflow_dispatch.

Nota

Se você quiser atualizar um pool de nós únicos em vez de todos os pools de nós no cluster, adicione o --name parâmetro ao az aks nodepool upgrade comando para especificar o nome do pool de nós. Por exemplo:

az aks nodepool upgrade --resource-group <resourceGroupName> --cluster-name <aksClusterName> --name <nodePoolName> --node-image-only
  • Adicione o gatilho workflow_dispatch sob a on chave:

    name: Upgrade cluster node images
    on:
      schedule:
        - cron: '0 3 */15 * *'
      workflow_dispatch:
    

    O YAML deve ser semelhante ao exemplo a seguir:

        name: Upgrade cluster node images
        on:
          schedule:
            - cron: '0 3 */15 * *'
          workflow_dispatch:
        jobs:
          upgrade-node:
            runs-on: ubuntu-latest
            steps:
              - name: Azure Login
                uses: Azure/login@v1.4.6
                with:
                  creds: ${{ secrets.AZURE_CREDENTIALS }}
              - name: Upgrade node images
                uses: Azure/cli@v1.0.8
                with:
                  inlineScript: az aks upgrade -g {resourceGroupName} -n {aksClusterName} --node-image-only --yes
              # Code for upgrading one or more node pools
    

Próximos passos

Para obter mais informações sobre atualizações do AKS, consulte os seguintes artigos e recursos:

Para obter uma discussão detalhada sobre as práticas recomendadas de atualização e outras considerações, consulte o patch do AKS e as diretrizes de atualização.