Stosowanie automatycznych uaktualnień zabezpieczeń do węzłów usługi Azure Kubernetes Service (AKS) przy użyciu funkcji GitHub Actions

Aktualizacje zabezpieczeń są kluczowym elementem utrzymania zabezpieczeń i zgodności klastra usługi AKS z najnowszymi poprawkami dla bazowego systemu operacyjnego. Te aktualizacje obejmują poprawki zabezpieczeń systemu operacyjnego lub aktualizacje jądra. Niektóre aktualizacje wymagają ponownego uruchomienia węzła w celu ukończenia procesu.

W tym artykule pokazano, jak zautomatyzować proces aktualizacji węzłów usługi AKS przy użyciu funkcji GitHub Actions i interfejsu wiersza polecenia platformy Azure w celu utworzenia zadania aktualizacji na cron podstawie tego uruchomienia automatycznie.

Uwaga

Można również automatycznie przeprowadzać uaktualnienia obrazów węzłów i planować te uaktualnienia przy użyciu planowanej konserwacji. Aby uzyskać więcej informacji, zobacz Automatyczne uaktualnianie obrazów węzłów.

Zanim rozpoczniesz

Aktualizowanie węzłów za pomocą polecenia az aks upgrade

Polecenie az aks upgrade zapewnia zerowy sposób przestoju w stosowaniu aktualizacji. Polecenie wykonuje następujące akcje:

  1. Stosuje najnowsze aktualizacje do wszystkich węzłów klastra.
  2. Cordons (sprawia, że węzeł jest niedostępny do planowania nowych obciążeń) i opróżniania (przenosi istniejące obciążenia do innego węzła) ruch do węzłów.
  3. Uruchamia ponownie węzły.
  4. Umożliwia ponowne odbieranie ruchu przez zaktualizowane węzły.

Usługa AKS nie uruchamia automatycznie ponownie węzłów, jeśli zaktualizujesz je przy użyciu innej metody.

Uwaga

Uruchomienie az aks upgrade z flagą --node-image-only powoduje uaktualnienie tylko obrazów węzłów. Uruchomienie polecenia bez flagi uaktualnia zarówno obrazy węzłów, jak i wersję płaszczyzny sterowania Kubernetes. Aby uzyskać więcej informacji, zobacz dokumentację dotyczącą uaktualnień zarządzanych w węzłach i dokumentację dotyczącą uaktualnień klastra.

Wszystkie węzły platformy Kubernetes działają na standardowej maszynie wirtualnej platformy Azure z systemem Windows lub Linux. Maszyny wirtualne oparte na systemie Linux używają obrazu systemu Ubuntu z systemem operacyjnym skonfigurowanym do automatycznego sprawdzania dostępności aktualizacji każdej nocy.

Gdy używasz az aks upgrade polecenia, interfejs wiersza polecenia platformy Azure tworzy wzrost nowych węzłów z najnowszymi aktualizacjami zabezpieczeń i jądra. Te nowe węzły są początkowo kordonem, aby uniemożliwić zaplanowanie zaplanowanych aplikacji do momentu ukończenia aktualizacji. Po zakończeniu aktualizacji cordons platformy Azure i opróżnia starsze węzły i usuwa nowe, przenosząc wszystkie zaplanowane aplikacje do nowych węzłów.

Ten proces jest lepszy niż ręczne aktualizowanie jąder opartych na systemie Linux, ponieważ system Linux wymaga ponownego uruchomienia po zainstalowaniu nowej aktualizacji jądra. Jeśli zaktualizujesz system operacyjny ręcznie, musisz również ponownie uruchomić maszynę wirtualną, ręcznie kordonować i opróżniać wszystkie aplikacje.

Tworzenie czasowej akcji usługi GitHub

cron to narzędzie, które umożliwia uruchamianie zestawu poleceń lub zadań zgodnie z harmonogramem automatycznym. Aby utworzyć zadanie aktualizacji węzłów usługi AKS w zautomatyzowanym harmonogramie, potrzebne jest repozytorium do hostowania akcji. Funkcja GitHub Actions jest zwykle konfigurowana w tym samym repozytorium co aplikacja, ale można użyć dowolnego repozytorium.

  1. Przejdź do repozytorium w witrynie GitHub.

  2. Wybierz Akcje.

  3. Wybierz pozycję Nowy przepływ pracy Skonfiguruj przepływ pracy>samodzielnie.

  4. Utwórz akcję usługi GitHub o nazwie Uaktualnij obrazy węzłów klastra z wyzwalaczem harmonogramu, który będzie uruchamiany co 15 dni o godzinie 3:00. Skopiuj następujący kod do kodu YAML:

    name: Upgrade cluster node images
    on:
      schedule:
        - cron: '0 3 */15 * *'
    
  5. Utwórz zadanie o nazwie upgrade-node uruchamiane na agencie systemu Ubuntu i nawiązuje połączenie z kontem interfejsu wiersza polecenia platformy Azure w celu wykonania polecenia uaktualnienia węzła. Skopiuj następujący kod do kodu YAML pod kluczem on :

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

Konfigurowanie interfejsu wiersza polecenia platformy Azure w przepływie pracy

  1. Na pasku Wyszukaj w witrynie Marketplace dla akcji wyszukaj pozycję Logowanie do platformy Azure.

  2. Wybierz pozycję Azure Login (Logowanie do platformy Azure).

    Wyniki wyszukiwania przedstawiające dwa wiersze, pierwsza akcja nosi nazwę

  3. W obszarze Instalacja wybierz wersję, taką jak wersja 1.4.6, i skopiuj fragment kodu instalacji.

  4. steps Dodaj klucz i następujące informacje z fragmentu kodu instalacji do kodu 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 }}
    

Tworzenie poświadczeń dla interfejsu wiersza polecenia platformy Azure

  1. W nowym oknie przeglądarki utwórz nową jednostkę usługi przy użyciu az ad sp create-for-rbac polecenia . Pamiętaj, aby zastąpić *{subscriptionID}* ciąg własnym identyfikatorem subskrypcji.

    Uwaga

    W tym przykładzie zostanie utworzona Contributor rola w zakresie Subskrypcja. Możesz podać rolę i zakres, który spełnia Twoje potrzeby. Aby uzyskać więcej informacji, zobacz Wbudowane role platformy Azure i poziomy zakresu RBAC platformy Azure.

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

    Dane wyjściowe powinny być podobne do następujących przykładowych danych wyjściowych:

    {
      "appId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
      "displayName": "xxxxx-xxx-xxxx-xx-xx-xx-xx-xx",
      "password": "xxxxxxxxxxxxxxxxxxxxxxxxxxxx",
      "tenant": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
    }
    
  2. Skopiuj dane wyjściowe i przejdź do repozytorium GitHub.

  3. Wybierz pozycję Ustawienia> Secrets i zmienne>Akcje>Nowy wpis tajny repozytorium.

  4. W polu Nazwa wprowadź AZURE_CREDENTIALS.

  5. W polu Wpis tajny skopiuj zawartość danych wyjściowych odebranych podczas tworzenia jednostki usługi.

  6. Wybierz opcję Dodaj sekret.

Tworzenie kroków wykonywania poleceń interfejsu wiersza polecenia platformy Azure

  1. Przejdź do okna za pomocą przepływu pracy YAML.

  2. Na pasku Wyszukaj w witrynie Marketplace dla akcji wyszukaj pozycję Akcja interfejsu wiersza polecenia platformy Azure.

  3. Wybierz pozycję Akcja interfejsu wiersza polecenia platformy Azure.

    Wynik wyszukiwania

  4. W obszarze Instalacja wybierz wersję, taką jak wersja 1.0.8, i skopiuj fragment kodu instalacji.

  5. Wklej zawartość akcji do kodu YAML poniżej *Azure Login* kroku, podobnie jak w poniższym przykładzie:

    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
    

    Napiwek

    Parametry i można rozdzielić --resource-group za pomocą polecenia , --name tworząc nowe wpisy tajne repozytorium, tak jak w przypadku polecenia AZURE_CREDENTIALS.

    Jeśli utworzysz wpisy tajne dla tych parametrów, musisz zastąpić <resourceGroupName> symbole zastępcze i <aksClusterName> ich odpowiednikami tajnymi. Na przykład ${{secrets.RESOURCE_GROUP_NAME}} i ${{secrets.AKS_CLUSTER_NAME}}

  6. Zmień nazwę pliku YAML na upgrade-node-images.yml.

  7. Wybierz pozycję Zatwierdź zmiany..., dodaj komunikat zatwierdzenia, a następnie wybierz pozycję Zatwierdź zmiany.

Ręczne uruchamianie akcji usługi GitHub

Przepływ pracy można uruchomić ręcznie oprócz zaplanowanego przebiegu, dodając nowy on wyzwalacz o nazwie workflow_dispatch.

Uwaga

Jeśli chcesz uaktualnić jedną pulę węzłów zamiast wszystkich pul węzłów w klastrze, dodaj --name parametr do az aks nodepool upgrade polecenia , aby określić nazwę puli węzłów. Na przykład:

az aks nodepool upgrade --resource-group <resourceGroupName> --cluster-name <aksClusterName> --name <nodePoolName> --node-image-only
  • workflow_dispatch Dodaj wyzwalacz pod kluczemon:

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

    Kod YAML powinien wyglądać podobnie do poniższego przykładu:

        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
    

Następne kroki

Aby uzyskać więcej informacji na temat uaktualnień usługi AKS, zobacz następujące artykuły i zasoby:

Szczegółowe omówienie najlepszych rozwiązań dotyczących uaktualniania i innych zagadnień można znaleźć w artykule AKS patch and upgrade guidance (Wskazówki dotyczące poprawek i uaktualniania usługi AKS).