Zarządzanie protokołem SSH na potrzeby bezpiecznego dostępu do węzłów usługi Azure Kubernetes Service (AKS)
W tym artykule opisano sposób konfigurowania kluczy SSH (wersja zapoznawcza) w klastrach lub pulach węzłów usługi AKS podczas początkowego wdrażania lub w późniejszym czasie.
Usługa AKS obsługuje następujące opcje konfiguracji do zarządzania kluczami SSH w węzłach klastra:
- Tworzenie klastra przy użyciu kluczy SSH
- Aktualizowanie kluczy SSH w istniejącym klastrze usługi AKS
- Wyłączanie i włączanie usługi SSH
Ważne
Funkcje usługi AKS w wersji zapoznawczej są dostępne na zasadzie samoobsługi. Wersje zapoznawcze są udostępniane w wersji "as is" i "jako dostępne" i są wykluczone z umów dotyczących poziomu usług i ograniczonej gwarancji. Wersje zapoznawcze usługi AKS są częściowo objęte pomocą techniczną dla klientów. W związku z tym te funkcje nie są przeznaczone do użytku produkcyjnego. Aby uzyskać więcej informacji, zobacz następujące artykuły pomocy technicznej:
Zanim rozpoczniesz
- Do korzystania z aktualizacji potrzebna jest
aks-preview
wersja 0.5.116 lub nowsza. - Aby użyć opcji Wyłącz, potrzebna jest
aks-preview
wersja 1.0.0b6 lub nowsza. - Funkcja Tworzenie i aktualizowanie protokołu SSH obsługuje pule węzłów systemów Linux, Windows i Azure Linux w istniejących klastrach.
- Funkcja Wyłącz protokół SSH nie jest obsługiwana w tej wersji zapoznawczej w pulach węzłów z systemem operacyjnym Windows Server.
Instalowanie rozszerzenia interfejsu wiersza polecenia platformy aks-preview
Azure
Zainstaluj rozszerzenie aks-preview przy użyciu
az extension add
polecenia .az extension add --name aks-preview
Przeprowadź aktualizację do najnowszej wersji rozszerzenia przy użyciu
az extension update
polecenia .az extension update --name aks-preview
Rejestrowanie flagi DisableSSHPreview
funkcji
Aby użyć funkcji Wyłącz protokół SSH, wykonaj następujące kroki, aby zarejestrować ją i włączyć w ramach subskrypcji.
Zarejestruj flagę
DisableSSHPreview
funkcji przy użyciuaz feature register
polecenia .az feature register --namespace "Microsoft.ContainerService" --name "DisableSSHPreview"
Wyświetlenie stanu Zarejestrowane trwa kilka minut.
Sprawdź stan rejestracji przy użyciu
az feature show
polecenia .az feature show --namespace "Microsoft.ContainerService" --name "DisableSSHPreview"
Gdy stan będzie odzwierciedlał wartość Zarejestrowano, odśwież rejestrację dostawcy zasobów Microsoft.ContainerService przy użyciu
az provider register
polecenia .az provider register --namespace Microsoft.ContainerService
Tworzenie klastra usługi AKS przy użyciu kluczy SSH
Użyj polecenia az aks create, aby wdrożyć klaster usługi AKS przy użyciu klucza publicznego SSH. Klucz lub plik klucza można określić przy użyciu argumentu --ssh-key-value
.
Parametr SSH | opis | Domyślna wartość |
---|---|---|
--generate-ssh-key |
Jeśli nie masz własnych kluczy SSH, określ wartość --generate-ssh-key . Interfejs wiersza polecenia platformy Azure automatycznie generuje zestaw kluczy SSH i zapisuje je w katalogu ~/.ssh/ domyślnym . |
|
--ssh-key-value | Ścieżka klucza publicznego lub zawartość klucza do zainstalowania na maszynach wirtualnych węzła na potrzeby dostępu za pomocą protokołu SSH. Na przykład ssh-rsa AAAAB...snip...UcyupgH azureuser@linuxvm . |
~/.ssh/id_rsa.pub |
--no-ssh-key |
Jeśli nie potrzebujesz kluczy SSH, określ ten argument. Jednak usługa AKS automatycznie generuje zestaw kluczy SSH, ponieważ zależność zasobu maszyny wirtualnej platformy Azure nie obsługuje pustego pliku kluczy SSH. W związku z tym klucze nie są zwracane i nie można ich używać do SSH na maszynach wirtualnych węzłów. Klucz prywatny jest odrzucany i nie jest zapisywany. |
Uwaga
Jeśli nie określono żadnych parametrów, interfejs wiersza polecenia platformy Azure domyślnie odwołuje się do kluczy SSH przechowywanych w ~/.ssh/id_rsa.pub
pliku. Jeśli klucze nie zostały znalezione, polecenie zwróci komunikat An RSA key file or key value must be supplied to SSH Key Value
.
Poniżej przedstawiono przykłady tego polecenia:
Aby utworzyć klaster i użyć domyślnych wygenerowanych kluczy SSH:
az aks create --name myAKSCluster --resource-group MyResourceGroup --generate-ssh-key
Aby określić plik klucza publicznego SSH, dołącz
--ssh-key-value
argument:az aks create --name myAKSCluster --resource-group MyResourceGroup --ssh-key-value ~/.ssh/id_rsa.pub
Aktualizowanie klucza publicznego SSH w istniejącym klastrze usługi AKS
az aks update
Użyj polecenia , aby zaktualizować klucz publiczny SSH (wersja zapoznawcza) w klastrze. Ta operacja aktualizuje klucz we wszystkich pulach węzłów. Klucz lub plik klucza można określić przy użyciu argumentu --ssh-key-value
.
Uwaga
Aktualizowanie kluczy SSH jest obsługiwane w zestawach skalowania maszyn wirtualnych platformy Azure za pomocą klastrów usługi AKS.
Poniżej przedstawiono przykłady tego polecenia:
Aby określić nową wartość klucza publicznego SSH, dołącz
--ssh-key-value
argument:az aks update --name myAKSCluster --resource-group MyResourceGroup --ssh-key-value 'ssh-rsa AAAAB3Nza-xxx'
Aby określić plik klucza publicznego SSH, określ go za pomocą argumentu
--ssh-key-value
:az aks update --name myAKSCluster --resource-group MyResourceGroup --ssh-key-value ~/.ssh/id_rsa.pub
Ważne
Po zaktualizowaniu klucza SSH usługa AKS nie aktualizuje automatycznie puli węzłów. W dowolnym momencie możesz wykonać operację aktualizacji puli węzłów. Operacja aktualizacji kluczy SSH ma zastosowanie po zakończeniu aktualizacji obrazu węzła.
Omówienie wyłączania protokołu SSH
Aby zwiększyć bezpieczeństwo i obsługiwać wymagania lub strategię zabezpieczeń firmy, usługa AKS obsługuje wyłączanie protokołu SSH (wersja zapoznawcza) zarówno w klastrze, jak i na poziomie puli węzłów. Opcja Wyłącz protokół SSH wprowadza uproszczone podejście w porównaniu z jedynym obsługiwanym rozwiązaniem, które wymaga skonfigurowania reguł sieciowej grupy zabezpieczeń w podsieci usługi AKS/węźle karty sieciowej. Wyłącz protokół SSH obsługuje tylko pule węzłów zestawów skalowania maszyn wirtualnych.
Po wyłączeniu protokołu SSH w czasie tworzenia klastra następuje jego działanie po utworzeniu klastra. Jednak po wyłączeniu protokołu SSH w istniejącej puli klastrów lub węzłów usługa AKS nie wyłącza automatycznie protokołu SSH. W dowolnym momencie możesz wykonać operację uaktualniania puli węzłów. Operacja wyłączania/włączania kluczy SSH jest wykonywana po zakończeniu aktualizacji obrazu węzła.
Uwaga
Po wyłączeniu protokołu SSH na poziomie klastra ma zastosowanie do wszystkich istniejących pul węzłów. Wszystkie pule węzłów utworzone po tej operacji będą domyślnie włączone za pomocą protokołu SSH i należy ponownie uruchomić te polecenia, aby je wyłączyć.
Parametr SSH | opis |
---|---|
disabled |
Usługa SSH jest wyłączona. |
localuser |
Usługa SSH jest włączona, a użytkownicy z kluczami SSH mogą bezpiecznie uzyskać dostęp do węzła. |
Uwaga
Węzeł debugowania kubectl nadal działa po wyłączeniu protokołu SSH, ponieważ nie zależy od usługi SSH.
Wyłączanie protokołu SSH w nowym wdrożeniu klastra
Domyślnie usługa SSH w węzłach klastra usługi AKS jest otwarta dla wszystkich użytkowników i zasobników uruchomionych w klastrze. Możesz zapobiec bezpośredniemu dostępowi SSH z dowolnej sieci do węzłów klastra, aby ograniczyć wektor ataku, jeśli zabezpieczenia kontenera w zasobniku staną się zagrożone.
az aks create
Użyj polecenia , aby utworzyć nowy klaster i dołączyć --ssh-access disabled
argument, aby wyłączyć protokół SSH (wersja zapoznawcza) we wszystkich pulach węzłów podczas tworzenia klastra.
Ważne
Po wyłączeniu usługi SSH nie można połączyć się z klastrem za pomocą protokołu SSH w celu wykonywania zadań administracyjnych lub rozwiązywania problemów.
Uwaga
W nowo utworzonym klastrze wyłącz protokół SSH skonfiguruje tylko 1 pulę węzłów systemowych. Wszystkie inne pule węzłów muszą być skonfigurowane na poziomie puli węzłów.
az aks create --resource-group myResourceGroup --name myManagedCluster --ssh-access disabled
Po kilku minutach polecenie zostanie wykonane i zwróci informacje o klastrze w formacie JSON. Poniższy przykład przypomina dane wyjściowe i wyniki związane z wyłączaniem protokołu SSH:
"securityProfile": {
"sshAccess": "Disabled"
},
Wyłączanie protokołu SSH w istniejącym klastrze
az aks update
Użyj polecenia , aby zaktualizować istniejący klaster i dołączyć --ssh-access disabled
argument, aby wyłączyć protokół SSH (wersja zapoznawcza) we wszystkich pulach węzłów w klastrze.
az aks update --resource-group myResourceGroup --name myManagedCluster --ssh-access disabled
Po kilku minutach polecenie zostanie wykonane i zwróci informacje o klastrze w formacie JSON. Poniższy przykład przypomina dane wyjściowe i wyniki związane z wyłączaniem protokołu SSH:
"securityProfile": {
"sshAccess": "Disabled"
},
Aby zmiana weszła w życie, należy odtworzyć wszystkie pule węzłów przy użyciu az aks nodepool upgrade
polecenia .
az aks nodepool upgrade --cluster-name myManagedCluster --name mynodepool --resource-group myResourceGroup --node-image-only
Ważne
Podczas tej operacji wszystkie wystąpienia zestawu skalowania maszyn wirtualnych są uaktualniane i odtwarzane w celu użycia nowej konfiguracji SSH.
Wyłączanie protokołu SSH dla nowej puli węzłów
az aks nodepool add
Użyj polecenia , aby dodać pulę węzłów i dołączyć --ssh-access disabled
argument, aby wyłączyć protokół SSH podczas tworzenia puli węzłów.
az aks nodepool add --cluster-name myManagedCluster --name mynodepool --resource-group myResourceGroup --ssh-access disabled
Po kilku minutach polecenie zostanie zakończone i zwróci informacje w formacie JSON dotyczące klastra wskazującego , że pula mynodepool została pomyślnie utworzona. Poniższy przykład przypomina dane wyjściowe i wyniki związane z wyłączaniem protokołu SSH:
"securityProfile": {
"sshAccess": "Disabled"
},
Wyłączanie protokołu SSH dla istniejącej puli węzłów
Użyj argumentu [az aks nodepool update][az-aks-nodepool-update] command with the
--ssh-access disabled", aby wyłączyć protokół SSH (wersja zapoznawcza) w istniejącej puli węzłów.
az aks nodepool update --cluster-name myManagedCluster --name mynodepool --resource-group myResourceGroup --ssh-access disabled
Po kilku minutach polecenie zostanie zakończone i zwróci informacje w formacie JSON dotyczące klastra wskazującego , że pula mynodepool została pomyślnie utworzona. Poniższy przykład przypomina dane wyjściowe i wyniki związane z wyłączaniem protokołu SSH:
"securityProfile": {
"sshAccess": "Disabled"
},
Aby zmiana weszła w życie, należy odtworzyć pulę węzłów przy użyciu az aks nodepool upgrade
polecenia .
az aks nodepool upgrade --cluster-name myManagedCluster --name mynodepool --resource-group myResourceGroup --node-image-only
Ponowne włączanie protokołu SSH w istniejącym klastrze
az aks update
Użyj polecenia , aby zaktualizować istniejący klaster i dołączyć --ssh-access localuser
argument umożliwiający ponowne włączenie protokołu SSH (wersja zapoznawcza) we wszystkich pulach węzłów w klastrze.
az aks update --resource-group myResourceGroup --name myManagedCluster --ssh-access localuser
Podczas wykonywania procesu zwracany jest następujący komunikat:
Only after all the nodes are reimaged, does the disable/enable SSH Access operation take effect."
Po ponownym włączeniu protokołu SSH węzły nie będą automatycznie odtwarzane. W dowolnym momencie możesz wykonać operację reimage.
Ważne
Podczas tej operacji wszystkie wystąpienia zestawu skalowania maszyn wirtualnych są uaktualniane i odtwarzane w celu użycia nowego klucza publicznego SSH.
Ponowne włączanie protokołu SSH dla określonej puli węzłów
az aks update
Użyj polecenia , aby zaktualizować określoną pulę węzłów i dołączyć --ssh-access localuser
argument umożliwiający ponowne włączenie protokołu SSH (wersja zapoznawcza) w tej puli węzłów w klastrze. W poniższym przykładzie pula nodepool1 jest pulą węzłów docelowych.
az aks nodepool update --cluster-name myManagedCluster --name nodepool1 --resource-group myResourceGroup --ssh-access localuser
Po wykonaniu procesu zostanie zwrócony następujący komunikat:
Only after all the nodes are reimaged, does the disable/enable SSH Access operation take effect.
Ważne
Podczas tej operacji wszystkie wystąpienia zestawu skalowania maszyn wirtualnych są uaktualniane i odtwarzane w celu użycia nowego klucza publicznego SSH.
Stan usługi SSH
Wykonaj następujące kroki, aby użyć powłoki węzła w jednym węźle i sprawdzić stan usługi SSH przy użyciu polecenia systemctl
.
Pobierz standardową powłokę bash, uruchamiając polecenie .
kubectl node-shell <node>
kubectl node-shell aks-nodepool1-20785627-vmss000001
Uruchom polecenie ,
systemctl
aby sprawdzić stan usługi SSH.systemctl status ssh
Jeśli protokół SSH jest wyłączony, następujące przykładowe dane wyjściowe zawierają wyniki:
ssh.service - OpenBSD Secure Shell server
Loaded: loaded (/lib/systemd/system/ssh.service; disabled; vendor preset: enabled)
Active: inactive (dead) since Wed 2024-01-03 15:36:57 UTC; 20min ago
Jeśli protokół SSH jest włączony, następujące przykładowe dane wyjściowe zawierają wyniki:
ssh.service - OpenBSD Secure Shell server
Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2024-01-03 15:40:20 UTC; 19min ago
Następne kroki
Aby ułatwić rozwiązywanie wszelkich problemów z łącznością SSH z węzłami klastrów, możesz wyświetlić dzienniki kubelet lub wyświetlić dzienniki węzłów głównych platformy Kubernetes.
Azure Kubernetes Service