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
- W tym artykule założono, że masz istniejący klaster usługi AKS. Jeśli potrzebujesz klastra usługi AKS, utwórz go przy użyciu interfejsu wiersza polecenia platformy Azure, programu Azure PowerShell lub witryny Azure Portal.
- W tym artykule założono również, że masz konto usługi GitHub i repozytorium profilów do hostowania akcji. Jeśli nie masz repozytorium, utwórz je o takiej samej nazwie jak nazwa użytkownika usługi GitHub.
- Potrzebny jest interfejs wiersza polecenia platformy Azure w wersji 2.0.59 lub nowszej, zainstalowany i skonfigurowany. Uruchom polecenie
az --version
, aby dowiedzieć się, jaka wersja jest używana. Jeśli konieczna będzie instalacja lub uaktualnienie, zobacz Instalowanie interfejsu wiersza polecenia platformy Azure.
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:
- Stosuje najnowsze aktualizacje do wszystkich węzłów klastra.
- 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.
- Uruchamia ponownie węzły.
- 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.
Przejdź do repozytorium w witrynie GitHub.
Wybierz Akcje.
Wybierz pozycję Nowy przepływ pracy Skonfiguruj przepływ pracy>samodzielnie.
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 * *'
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
Na pasku Wyszukaj w witrynie Marketplace dla akcji wyszukaj pozycję Logowanie do platformy Azure.
Wybierz pozycję Azure Login (Logowanie do platformy Azure).
W obszarze Instalacja wybierz wersję, taką jak wersja 1.4.6, i skopiuj fragment kodu instalacji.
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
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" }
Skopiuj dane wyjściowe i przejdź do repozytorium GitHub.
Wybierz pozycję Ustawienia>Wpisy tajne i zmienne>Akcje>Nowy wpis tajny repozytorium.
W polu Nazwa wprowadź
AZURE_CREDENTIALS
.W polu Wpis tajny skopiuj zawartość danych wyjściowych odebranych podczas tworzenia jednostki usługi.
Wybierz opcję Dodaj sekret.
Tworzenie kroków wykonywania poleceń interfejsu wiersza polecenia platformy Azure
Przejdź do okna za pomocą przepływu pracy YAML.
Na pasku Wyszukaj w witrynie Marketplace dla akcji wyszukaj pozycję Akcja interfejsu wiersza polecenia platformy Azure.
Wybierz pozycję Akcja interfejsu wiersza polecenia platformy Azure.
W obszarze Instalacja wybierz wersję, taką jak wersja 1.0.8, i skopiuj fragment kodu instalacji.
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 poleceniaAZURE_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}}
Zmień nazwę pliku YAML na
upgrade-node-images.yml
.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).
Azure Kubernetes Service