Udostępnij za pośrednictwem


Stosowanie aktualizacji zabezpieczeń i jądra do węzłów systemu Linux w usłudze Azure Kubernetes Service (AKS)

Aby chronić klastry, aktualizacje zabezpieczeń są automatycznie stosowane do węzłów systemu Linux w usłudze AKS. Te aktualizacje obejmują poprawki zabezpieczeń systemu operacyjnego lub aktualizacje jądra. Niektóre z tych aktualizacji wymagają ponownego uruchomienia węzła w celu ukończenia procesu. Usługa AKS nie uruchamia automatycznie tych węzłów systemu Linux w celu ukończenia procesu aktualizacji.

Proces aktualizowania węzłów systemu Windows Server jest nieco inny. Węzły systemu Windows Server nie otrzymują codziennych aktualizacji. Zamiast tego należy przeprowadzić uaktualnienie usługi AKS, które wdraża nowe węzły przy użyciu najnowszego podstawowego obrazu i poprawek systemu Windows Server. W przypadku klastrów usługi AKS korzystających z węzłów systemu Windows Server zobacz Uaktualnianie puli węzłów w usłudze AKS.

W tym artykule pokazano, jak używać kured typu open source (KUbernetes REboot Daemon) do oglądania węzłów systemu Linux, które wymagają ponownego uruchomienia, a następnie automatycznie obsługiwać ponowne uruchamianie zasobników i procesu ponownego uruchamiania węzła.

Uwaga

Kured jest projektem open source w cloud Native Computing Foundation. Prosimy o bezpośrednie problemy z kured GitHub. Dodatkową pomoc techniczną można znaleźć w kanale #kured na PLATFORMIE CNCF Slack.

Ważne

Oprogramowanie typu open source jest wymienione w dokumentacji i przykładach usługi AKS. Wdrażane oprogramowanie jest wykluczone z umów dotyczących poziomu usług AKS, ograniczonej gwarancji i pomoc techniczna platformy Azure. W miarę korzystania z technologii open source wraz z usługą AKS zapoznaj się z opcjami pomocy technicznej dostępnymi w odpowiednich społecznościach i opiekunami projektów, aby opracować plan.

Na przykład repozytorium Ray GitHub opisuje kilka platform, które różnią się w czasie odpowiedzi, celu i poziomie pomocy technicznej.

Firma Microsoft ponosi odpowiedzialność za tworzenie pakietów typu open source wdrażanych w usłudze AKS. Ta odpowiedzialność obejmuje posiadanie pełnej własności procesu kompilacji, skanowania, podpisywania, weryfikowania i poprawek oraz kontroli nad plikami binarnymi na obrazach kontenerów. Aby uzyskać więcej informacji, zobacz Zarządzanie lukami w zabezpieczeniach dla usług AKS i pokrycie pomocy technicznej usługi AKS.

Zanim rozpoczniesz

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.

Omówienie środowiska aktualizacji węzła usługi AKS

W klastrze usługi AKS węzły kubernetes działają jako maszyny wirtualne platformy Azure. Te maszyny wirtualne oparte na systemie Linux używają obrazu systemu Ubuntu lub Azure Linux z systemem operacyjnym skonfigurowanym do automatycznego sprawdzania dostępności aktualizacji każdego dnia. Jeśli są dostępne aktualizacje zabezpieczeń lub jądra, są one automatycznie pobierane i instalowane.

Proces aktualizacji i ponownego uruchamiania węzła usługi AKS za pomocą kured

Niektóre aktualizacje zabezpieczeń, takie jak aktualizacje jądra, wymagają ponownego uruchomienia węzła w celu sfinalizowania procesu. Węzeł systemu Linux, który wymaga ponownego uruchomienia, tworzy plik o nazwie /var/run/reboot-required. Ten proces ponownego rozruchu nie następuje automatycznie.

Możesz użyć własnych przepływów pracy i procesów do obsługi ponownych rozruchów węzłów lub użyć kured ich do organizowania procesu. W programie kuredjest wdrażany element DaemonSet, który uruchamia zasobnik w każdym węźle systemu Linux w klastrze. Te zasobniki w zestawie DaemonSet obserwują istnienie pliku /var/run/reboot-required , a następnie zainicjować proces ponownego uruchamiania węzłów.

Uaktualnienia obrazu węzła

Nienadzorowane uaktualnienia stosują aktualizacje do systemu operacyjnego węzła systemu Linux, ale obraz używany do tworzenia węzłów dla klastra pozostaje niezmieniony. Jeśli nowy węzeł systemu Linux zostanie dodany do klastra, oryginalny obraz zostanie użyty do utworzenia węzła. Ten nowy węzeł otrzymuje wszystkie aktualizacje zabezpieczeń i jądra dostępne podczas automatycznego sprawdzania każdego dnia, ale pozostaje niezapieczętowany do momentu zakończenia wszystkich testów i ponownych uruchomień.

Alternatywnie możesz użyć uaktualnienia obrazu węzła, aby sprawdzić i zaktualizować obrazy węzłów używane przez klaster. Aby uzyskać więcej informacji na temat uaktualniania obrazu węzła, zobacz Uaktualnianie obrazu węzła usługi Azure Kubernetes Service (AKS).

Uaktualnienia węzłów

W usłudze AKS istnieje inny proces, który umożliwia uaktualnienie klastra. Uaktualnienie polega zazwyczaj na przejściu do nowszej wersji rozwiązania Kubernetes, a nie tylko stosowania aktualizacji zabezpieczeń węzła. Uaktualnienie usługi AKS wykonuje następujące czynności:

  • Nowy węzeł jest wdrażany przy użyciu najnowszych aktualizacji zabezpieczeń i zastosowanej wersji rozwiązania Kubernetes.
  • Stary węzeł jest odprowadzony i opróżniany.
  • Zasobniki są zaplanowane w nowym węźle.
  • Stary węzeł jest usuwany.

Nie można pozostać w tej samej wersji platformy Kubernetes podczas zdarzenia uaktualniania. Musisz określić nowszą wersję platformy Kubernetes. Aby uaktualnić klaster usługi AKS do najnowszej wersji platformy Kubernetes, możesz uaktualnić klaster usługi AKS.

Wdrażanie kured w klastrze usługi AKS

Aby wdrożyć zestaw kured DaemonSet, zainstaluj następujący oficjalny wykres Programu Helm Kured. Spowoduje to utworzenie roli i roli klastra, powiązań i konta usługi, a następnie wdrożenie elementu DaemonSet przy użyciu polecenia kured.

# Add the Kured Helm repository
helm repo add kubereboot https://kubereboot.github.io/charts/

# Update your local Helm chart repository cache
helm repo update

# Create a dedicated namespace where you would like to deploy kured into
kubectl create namespace kured

# Install kured in that namespace with Helm 3 (only on Linux nodes, kured is not working on Windows nodes)
helm install my-release kubereboot/kured --namespace kured --set controller.nodeSelector."kubernetes\.io/os"=linux

Można również skonfigurować dodatkowe parametry dla programu kured, takie jak integracja z rozwiązaniem Prometheus lub Slack. Aby uzyskać więcej informacji na temat parametrów konfiguracji, zobacz wykres programu Helm kured.

Aktualizowanie węzłów klastra

Domyślnie węzły systemu Linux w usłudze AKS sprawdzają dostępność aktualizacji każdego wieczoru. Jeśli nie chcesz czekać, możesz ręcznie wykonać aktualizację, aby sprawdzić, czy kured działa poprawnie. Najpierw wykonaj kroki sSH do jednego z węzłów usługi AKS. Po nawiązaniu połączenia SSH z węzłem systemu Linux sprawdź aktualizacje i zastosuj je w następujący sposób:

sudo apt-get update && sudo apt-get upgrade -y

Jeśli zastosowano aktualizacje wymagające ponownego uruchomienia węzła, plik jest zapisywany w /var/run/reboot-required. Kured sprawdza węzły, które domyślnie wymagają ponownego uruchomienia co 60 minut.

Monitorowanie i przeglądanie procesu ponownego uruchamiania

Gdy jedna z replik w zestawie DaemonSet wykryje, że wymagany jest ponowny rozruch węzła, blokada jest umieszczana w węźle za pośrednictwem interfejsu API kubernetes. Ta blokada uniemożliwia zaplanowanie większej liczby zasobników w węźle. Blokada wskazuje również, że w danym momencie należy ponownie uruchomić tylko jeden węzeł. Po wyłączeniu węzła uruchomione zasobniki są opróżniane z węzła, a węzeł jest ponownie uruchamiany.

Stan węzłów można monitorować za pomocą polecenia kubectl get nodes . Następujące przykładowe dane wyjściowe przedstawiają węzeł ze stanem SchedulingDisabled , gdy węzeł przygotowuje się do ponownego uruchomienia procesu:

NAME                       STATUS                     ROLES     AGE       VERSION
aks-nodepool1-28993262-0   Ready,SchedulingDisabled   agent     1h        v1.11.7

Po zakończeniu procesu aktualizacji można wyświetlić stan węzłów przy użyciu polecenia kubectl get nodes z parametrem --output wide . Te dane wyjściowe umożliwiają wyświetlenie różnicy w wersji JĄDRA węzłów bazowych, jak pokazano w poniższych przykładowych danych wyjściowych. Biblioteka aks-nodepool1-28993262-0 została zaktualizowana w poprzednim kroku i pokazuje jądro w wersji 4.15.0-1039-azure. Węzeł aks-nodepool1-28993262-1, który nie został zaktualizowany, pokazuje jądro w wersji 4.15.0-1037-azure.

NAME                       STATUS    ROLES     AGE       VERSION   INTERNAL-IP   EXTERNAL-IP   OS-IMAGE             KERNEL-VERSION      CONTAINER-RUNTIME
aks-nodepool1-28993262-0   Ready     agent     1h        v1.11.7   10.240.0.4    <none>        Ubuntu 16.04.6 LTS   4.15.0-1039-azure   docker://3.0.4
aks-nodepool1-28993262-1   Ready     agent     1h        v1.11.7   10.240.0.5    <none>        Ubuntu 16.04.6 LTS   4.15.0-1037-azure   docker://3.0.4

Następne kroki

W tym artykule opisano sposób automatycznego kured ponownego uruchamiania węzłów systemu Linux w ramach procesu aktualizacji zabezpieczeń. Aby uaktualnić klaster usługi AKS do najnowszej wersji platformy Kubernetes, możesz uaktualnić klaster usługi AKS.

W przypadku klastrów usługi AKS korzystających z węzłów systemu Windows Server zobacz Uaktualnianie puli węzłów w usłudze AKS.

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).