Rozwiązywanie problemów z rozruchem i siecią za pomocą nowej konsoli EC2 Serial Console

23 kwietnia 2021

Naprawianie problemów produkcyjnych jest jednym z kluczowych obowiązków administratorów systemów i sieci.

Zagłębiając się w dany problem tak głęboko, jak to konieczne, nie tylko (ostatecznie) mamy satysfakcję z rozwiązania problemu, ale także uczymy się wielu rzeczy, na które prawdopodobnie nie bylibyśmy narażeni w normalnych okolicznościach.

Systemy operacyjne z pewnością dają takie możliwości. Z biegiem czasu stawały się coraz bardziej złożone, zmuszając administratorów do opanowania milionów plików konfiguracyjnych i ustawień. Chociaż infrastruktura jako kod i automatyzacja znacznie poprawiły udostępnianie i zarządzanie serwerami, zawsze jest miejsce na błędy i awarie, które uniemożliwiają poprawne uruchomienie systemu. Lista nie ma końca: brakujące sterowniki sprzętowe, źle skonfigurowane systemy plików, nieprawidłowa konfiguracja sieci, nieprawidłowe uprawnienia i tak dalej. Co gorsza, wiele problemów może skutecznie zablokować administratorom dostęp do systemu, uniemożliwiając im zalogowanie się, zdiagnozowanie problemu i zastosowanie odpowiedniej poprawki. Jedyną opcją jest bezpośrednie połączenie z serwerami i chociaż klienci mogli przeglądać console output instancji EC2, nie mogli z nią wchodzić w interakcje - aż do teraz.

AWS przedstawił rozwiązanie: konsolę EC2 Serial Console, prostą i bezpieczną metodę rozwiązywania problemów z rozruchem i łącznością sieciową poprzez ustanowienie połączenia typu serial z instancjami Amazon Elastic Compute Cloud (EC2).

Wprowadzenie konsoli EC2 Serial Console

Dostęp do konsoli EC2 Serial Console jest dostępny dla instancji EC2 opartych na systemie AWS Nitro. Obsługuje wszystkie główne dystrybucje Linuksa, FreeBSD, NetBSD, Microsoft Windows i VMWare. 

Bez potrzeby posiadania działającej konfiguracji sieciowej można połączyć się z instancją za pomocą powłoki opartej na przeglądarce w konsoli AWS Management Console lub połączenia SSH z serwerem konsoli zarządzanej. Nie ma potrzeby, aby serwer sshd działał w Twojej instancji: jedynym wymaganiem jest to, że konto root ma przypisane hasło, ponieważ jest to hasło, którego będziesz używać do logowania. Następnie możesz wprowadzać polecenia tak, jakbyś miał klawiaturę i monitor podłączone bezpośrednio do jednego z portów szeregowych instancji.

Ponadto możesz wyzwalać procedury specyficzne dla systemu operacyjnego:

  • Na Linuksie możesz wywołać komendę Magic SysRq generującą tzw. crash dump, zabić procesy i tak dalej.
  • W systemie Windows można przerwać proces rozruchu i uruchomić komputer w trybie awaryjnym za pomocą usługi Emergency Management Service (EMS) i specjalnej konsoli Special Admin Console (SAC).

Uzyskanie dostępu do konsoli instancji to uprzywilejowana operacja, która powinna być ściśle kontrolowana, dlatego dostęp do EC2 Serial Console nie jest domyślnie dozwolony na poziomie konta. Gdy zezwolisz na dostęp na swoim koncie, będzie to miało zastosowanie do wszystkich instancji na tym koncie. Administratorzy mogą również stosować mechanizmy kontroli na poziomie organizacji dzięki zasadom Service Control Policies, a na poziomie instancji dzięki AWS Identity and Access Management (IAM). Jak można się spodziewać, cała komunikacja z konsolą EC2 Serial Console jest szyfrowana, a dla każdej sesji generowany jest unikalny klucz.

Zróbmy krótkie demo dla systemu Linux. Proces jest podobny w przypadku innych systemów operacyjnych.

Połączenie z EC2 Serial Console za pomocą AWS Management Console

Najpierw uruchamiamy instancję Amazon Linux 2. Logując się do niej, zmieniamy konfigurację sieci dla jej interfejsu sieciowego Ethernet (/etc/sysconfig/network-scripts/ifcfg-eth0), ustawiając całkowicie fałszywy statyczny adres IP. Pamiętaj aby nie próbować tego na instancji produkcyjnej!

Następnie ponownie uruchamiamy instancję. Kilka sekund później, mimo że instancja jest uruchomiona i działa w konsoli EC2, a port 22 w jej Security Group jest otwarty, nie możemy się z nią połączyć za pomocą protokołu SSH.

$ ssh -i ~/.ssh/mykey.pem ec2-user@ec2-3-238-8-46.compute-1.amazonaws.com
ssh: connect to host ec2-3-238-8-46.compute-1.amazonaws.com port 22: Operation timed out

Konsola EC2 Serial na ratunek!

Najpierw musimy zezwolić na dostęp do konsoli na koncie. Wystarczy zaznaczyć pole w ustawieniach EC2.

Manage EC2

Następnie klikając prawym przyciskiem myszy na nazwę instancji w konsoli EC2, wybieramy opcję Monitor and troubleshoot z listy; a potem EC2 Serial Console.

Monitor and troubleshoot

Otworzy się nowe okno potwierdzające identyfikator instancji i numer portu szeregowego, z którym chcemy się połączyć. Klikamy Connect.

EC2 Serial Console

Otworzy się nowa karta w przeglądarce. Naciskając Enter, widzimy znajomy monit logowania.

 

Amazon Linux 2
Kernel 4.14.225-168.357.amzn2.x86_64 on an x86_64
ip-172-31-67-148 login:

Po zalogowaniu się jako root odczuwamy ulgę, gdy pojawia się przyjazny komunikat powłoki.

Włączając Magic SysRq dla tej sesji (sysctl -w kernel.sysrq=1), najpierw wyświetlamy listę dostępnych poleceń (CTRL-0 + h), a następnie pytamy o raport pamięci (CTRL-0 + m). 

console

Z pewnością przydałoby się to przy rozwiązywaniu złożonych problemów. Nie ma takiej potrzeby: szybko przywracamy prawidłową konfigurację interfejsu sieciowego i ponownie uruchamiamy network stack.

console

Próbując ponownie połączyć się z instancją, widzimy, że problem został rozwiązany.

$ ssh -i ~/.ssh/mykey.pem ec2-user@ec2-3-238-8-46.compute-1.amazonaws.com

__|   __|_  )
_|   (    / Amazon Linux 2 AMI
___|\___|___|

https://aws.amazon.com/amazon-linux-2/
[ec2-user@ip-172-31-67-148 ~]$

Teraz pozwólcie, że szybko pokażę wam równoważne polecenia przy użyciu interfejsu wiersza poleceń AWS

Łączenie się z EC2 Serial Console za pomocą AWS CLI

Najpierw wysyłamy klucz publiczny SSH dla pary kluczy instancji do konsoli szeregowej. Zawsze pamiętaj, aby dodać przedrostek file://

$ aws ec2-instance-connect send-serial-console-ssh-public-key --instance-id i-003aecec198b537b0 --ssh-public-key file://~/.ssh/mykey.pub --serial-port 0 --region us-east-1

Następnie łączymy się z serial console, używając <instance id>.port<port number> jako nazwy użytkownika. Ponownie widzimy monit proszący o zalogowanie.

$ ssh -i ~/.ssh/mykey.pem i-003aecec198b537b0.port0@serial-console.ec2-instance-connect.us-east-1.aws

Amazon Linux 2
Kernel 4.14.225-168.357.amzn2.x86_64 on an x86_64
ip-172-31-67-148 login:

Po zalogowaniu, Magic SysRq jest dostępny i możemy go uruchomić za pomocą polecenia ~B+command. Możemy też zakończyć sesję konsoli za pomocą ~..

Rozpoczęcie korzystania z EC2 Serial Console

Jak widać, konsola EC2 Serial Console znacznie ułatwia debugowanie i naprawianie problemów z rozruchem i siecią w instancjach EC2. Możesz zacząć jej używać w następujących regionach AWS bez dodatkowych kosztów:

  • Wschodnie stany USA (Wirginia Północna), Zachodnie stany USA (Oregon), Wschodnie stany USA (Ohio)
  • Europa (Irlandia), Europa (Frankfurt)
  • Azja i Pacyfik (Tokio), Azja i Pacyfik (Sydney), Azja i Pacyfik (Singapur)

źródło: AWS

Case Studies
Referencje

Z przyjemnością polecamy firmę Hostersi, z którą mieliśmy przyjemność współpracować przy okazji wdrożenia skalowalnej infrastruktury w Amazon Web Services, opartej o technologię Kubernetes i metodykę DevOps.  Hostersi okazali się niezwykle proaktywnym partnerem, który nie tylko wdrażał wskazane rozwiązania, ale proponował optymalne narzędzia i technologie, które sprawiły, że efekt wdrożenia jest dla nas w pełni satysfakcjonujący. Polecamy!

Grzegorz Lentzy
IT Director LINK Mobility
W skrócie o nas
Specjalizujemy się w dostarczaniu rozwiązań IT w obszarach projektowania infrastruktury serwerowej, wdrażania chmury obliczeniowej, opieki administracyjnej i bezpieczeństwa danych.