1. Wprowadzenie
Równoważenie obciążenia Google Cloud jest wdrażane na brzegu sieci Google w punktach dostępowych Google na całym świecie. Ruch użytkowników kierowany do systemu równoważenia obciążenia serwera proxy TCP trafia do punktu dostępu najbliższego użytkownikowi, a następnie obciążenie jest równoważone w globalnej sieci Google do najbliższego backendu, który ma wystarczającą wydajność.
Cloud Armor to opracowany przez Google system wykrywania rozproszonej odmowy usługi i zapory sieciowej aplikacji internetowej (WAF). Usługa Cloud Armor jest ściśle połączona z systemem równoważenia obciążenia serwera proxy Google Cloud TCP i umożliwia wykrywanie niechcianych żądań. Funkcja ograniczania liczby żądań w tej usłudze pozwala ograniczać ruch do zasobów backendu na podstawie liczby żądań i zapobiega wykorzystywaniu zasobów w sieci prywatnego środowiska wirtualnego w chmurze (VPC) przez niechciany ruch.
Systemy równoważenia obciążenia serwera proxy TCP/SSL w Google Cloud umożliwiają przekazywanie ruchu typu TCP/ SSL między usługami backendu.
W ramach tego ćwiczenia w Codelabs utworzysz system równoważenia obciążenia serwera proxy TCP/SSL z usługą backendu i użyjesz Cloud Armor, aby ograniczyć dostęp do systemu równoważenia obciążenia tylko do określonego zestawu klientów użytkownika.
Czego się nauczysz
- Jak utworzyć system równoważenia obciążenia serwera proxy TCP/SSL
- Jak utworzyć zasadę zabezpieczeń Cloud Armor
- Jak utworzyć regułę listy odrzuconych adresów IP dla systemu równoważenia obciążenia serwera proxy TCP/SSL w Cloud Armor
- Jak utworzyć regułę ograniczania liczby żądań dla systemu równoważenia obciążenia serwera proxy TCP w Cloud Armor
- Jak dodać zasadę zabezpieczeń do usługi backendu równoważenia obciążenia TCP/SSL
Czego potrzebujesz
- Podstawowa znajomość Google Compute Engine ( laboratorium)
- Podstawowa wiedza o sieciach i TCP/IP
- Podstawowa wiedza na temat wiersza poleceń systemu Unix/Linux.
- Warto zapoznać się z prezentacją sieci w GCP w temacie Networking in the Google Cloud (Sieć w Google Cloud).
2. Wymagania
Samodzielne konfigurowanie środowiska
- Zaloguj się w konsoli Google Cloud i utwórz nowy projekt lub wykorzystaj już istniejący. Jeśli nie masz jeszcze konta Gmail ani Google Workspace, musisz je utworzyć.
Uwaga: możesz łatwo uzyskać dostęp do konsoli Google Cloud, zapamiętując jej adres URL, czyli Console.cloud.google.com.
Zapamiętaj identyfikator projektu, unikalną nazwę we wszystkich projektach Google Cloud (powyższa nazwa jest już zajęta i nie będzie Ci odpowiadać). W dalszej części tego ćwiczenia z programowania będzie on określany jako PROJECT_ID.
Uwaga: jeśli używasz konta Gmail, możesz pozostawić domyślną lokalizację ustawioną na Brak organizacji. Jeśli używasz konta Google Workspace, wybierz lokalizację, która będzie odpowiednia dla Twojej organizacji.
- Następnie musisz włączyć płatności w Cloud Console, aby korzystać z zasobów Google Cloud.
Ukończenie tego ćwiczenia z programowania nie powinno kosztować zbyt wiele. Postępuj zgodnie z instrukcjami podanymi w sekcji „Czyszczenie” W tym samouczku znajdziesz wskazówki, jak wyłączyć zasoby, aby uniknąć naliczania opłat. Nowi użytkownicy Google Cloud mogą skorzystać z programu bezpłatnego okresu próbnego o wartości 300 USD.
Uruchamianie Cloud Shell
Google Cloud można obsługiwać zdalnie z laptopa, ale w ramach tego ćwiczenia z programowania wykorzystasz Google Cloud Shell – środowisko wiersza poleceń działające w chmurze.
W konsoli GCP kliknij ikonę Cloud Shell na górnym pasku narzędzi:
Uzyskanie dostępu do środowiska i połączenie się z nim powinno zająć tylko kilka chwil. Po zakończeniu powinno pojawić się coś takiego:
Ta maszyna wirtualna ma wszystkie potrzebne narzędzia dla programistów. Zawiera stały katalog domowy o pojemności 5 GB i działa w Google Cloud, znacząco zwiększając wydajność sieci i uwierzytelnianie. Wszystkie zadania w tym module możesz wykonać w przeglądarce.
Zanim zaczniesz
Sprawdź w Cloud Shell, czy identyfikator projektu jest skonfigurowany
gcloud config list project gcloud config set project [YOUR-PROJECT-NAME] PROJECT_ID=[YOUR-PROJECT-NAME] echo $PROJECT_ID
Włącz interfejsy API
Włącz wszystkie niezbędne usługi
gcloud services enable compute.googleapis.com gcloud services enable logging.googleapis.com gcloud services enable monitoring.googleapis.com
3. Tworzenie usług backendu
Utwórz 2 instancje w następujący sposób – utwórz instancję 1-b1 w strefie us-central1-b.
gcloud compute instances create vm-1-b1 \ --image-family debian-9 \ --image-project debian-cloud \ --tags tcp-lb \ --zone us-central1-b \ --metadata startup-script="#! /bin/bash sudo apt-get update sudo apt-get install apache2 -y sudo sed -i '/Listen 80/c\Listen 110' /etc/apache2/ports.conf sudo service apache2 restart echo '<!doctype html><html><body><h1>This is VM1-b1 in central1-b</h1></body></html>' | tee /var/www/html/index.html EOF"
Utwórz instancję 1-b2 w strefie us-central1-b
gcloud compute instances create vm-1-b2 \ --image-family debian-9 \ --image-project debian-cloud \ --tags tcp-lb \ --zone us-central1-b \ --metadata startup-script="#! /bin/bash sudo apt-get update sudo apt-get install apache2 -y sudo sed -i '/Listen 80/c\Listen 110' /etc/apache2/ports.conf sudo service apache2 restart echo '<!doctype html><html><body><h1>This is VM1-b2 in central1-b</h1></body></html>' | tee /var/www/html/index.html EOF"
Tworzenie grupy instancji w maszynie wirtualnej vm-ig1
gcloud compute instance-groups unmanaged create vm-ig1 --zone us-central1-b
Utwórz nazwany port dla grupy instancji. W tym module użyjemy portu 110.
gcloud compute instance-groups set-named-ports vm-ig1 \ --named-ports tcp 110:110 --zone us-central1-b
Dodaj instancje do grupy instancji
gcloud compute instance-groups unmanaged add-instances vm-ig1 \ --instances vm-1-b1,vm-1-b2 --zone us-central1-b
4. Konfigurowanie systemu równoważenia obciążenia
Następnie utworzymy kontrolę stanu.
gcloud compute health-checks create tcp my-tcp-health-check --port 110
Utwórz usługę backendu
gcloud compute backend-services create my-tcp-lb --global-health-checks --global \ --protocol TCP --health-checks my-tcp-health-check --timeout 5m --port-name tcp110
Dodaj grupę instancji do usługi backendu
gcloud compute backend-services add-backend my-tcp-lb --global --instance-group \ vm-ig1 --instance-group-zone us-central1-b --balancing-mode UTILIZATION \ --max-utilization 0.8
Konfigurowanie docelowego serwera proxy TCP
gcloud compute target-tcp-proxies create my-tcp-lb-target-proxy --backend-service \ my-tcp-lb --proxy-header NONE
Zarezerwuj globalne statyczne adresy IPv4
Ten adres IP będzie służył do łączenia się z usługą równoważenia obciążenia.
gcloud compute addresses create tcp-lb-static-ipv4 --ip-version=IPV4 --global
Skonfiguruj globalne reguły przekierowania dla adresu IP systemu równoważenia obciążenia.
gcloud compute forwarding-rules create my-tcp-lb-ipv4-forwarding-rule \ --global --target-tcp-proxy my-tcp-lb-target-proxy --address LB_STATIC_IPV4 \ --ports 110
5. Tworzenie reguły zapory sieciowej dla systemu równoważenia obciążenia serwera proxy TCP
gcloud compute firewall-rules create allow-tcplb-and-health \ --source-ranges 130.211.0.0/22,35.191.0.0/16 \ --target-tags tcp-lb \ --allow tcp:110
Po utworzeniu systemu równoważenia obciążenia przetestuj go za pomocą tego polecenia
Curl LB_IP:110
Następnie utwórz maszyny wirtualne do weryfikacji odmowy dostępu do systemu równoważenia obciążenia
Utwórz 2 instancje, każdą z publicznym adresem IP oraz nazwami „test-server1” i „test-server2”.
6. Tworzenie zasady zabezpieczeń w Cloud Armor
W tej sekcji utworzysz zasadę zabezpieczeń backendu i 2 reguły w zasadzie w Cloud Armor.
Pierwsza reguła blokuje dostęp ograniczony zestaw adresów IP do systemu równoważenia obciążenia TCP przez ustawienie zasady zabezpieczeń, która odrzuca określone adresy IP, a druga ogranicza liczbę żądań.
- W Cloud Shell utwórz zasadę zabezpieczeń usługi backendu o nazwie rate-limit-and-deny-tcp w sekcji „Konfiguracja i wymagania” w sekcji „Konfiguracja i wymagania”. Składaj w ten sposób zasadę zabezpieczeń usługi backendu:
gcloud compute security-policies create rate-limit-and-deny-tcp \ --description "policy for tcp proxy rate limiting and IP deny"
Dodaj reguły do zasady zabezpieczeń
Następnie dodaj regułę listy odrzuconych do zasady Cloud Armor „rate-limit-and-deny-tcp”.
gcloud compute security-policies rules create 1000 --action deny --security-policy \ rate-limit-and-deny-tcp --description "deny test-server1" --src-ip-ranges \ "enter-test-server-1ip-here"
Dodaj regułę ograniczającą częstotliwość do zasady zabezpieczeń Cloud Armor „limit-i-odmowa-tcp”
gcloud compute security-policies rules create 3000 \ --security-policy=rate-limit-and-deny-tcp \ --expression="true" --action=rate-based-ban --rate-limit-threshold-count=5 \ --rate-limit-threshold-interval-sec=60 --ban-duration-sec=300 \ --conform-action=allow --exceed-action=deny-404 --enforce-on-key=IP
Dołącz zasadę do usługi backendu serwera proxy TCP:
Uruchom poniższe polecenie, aby upewnić się, że zasada zabezpieczeń jest podłączona do usługi backendu serwera proxy TCP.
gcloud compute backend-services update my-tcp-lb --security-policy \ rate-limit-and-deny-tcp
Włącz logowanie w systemie równoważenia obciążenia serwera proxy TCP
gcloud beta compute backend-services update my-tcp-lb \ --enable-logging --logging-sample-rate=1
7. Zweryfikuj regułę listy odrzuconych
Zweryfikuj regułę listy odrzuconych, logując się na serwer testowy, którego adres IP został określony w regule listy odrzuconych, i uruchom następujące polecenie
Curl LB_IP:110
Natychmiastowe żądania mogą zwrócić odpowiedź z systemu równoważenia obciążenia, ale poczekać, aż żądanie curl zostanie odrzucone lub usunięte, a następnie sprawdzić logi w Cloud Logging, aby zweryfikować wpis logu dla aktywowanej reguły odmowy adresu IP.
Otwórz Cloud Logging i w sekcji zasobów wybierz typ zasobu „tcp_ssl_proxy_rule” i ustaw miejsce docelowe backendu na „my-tcp-lb”.
Po zdefiniowaniu zasobów na potrzeby filtrowania możemy sprawdzić, czy reguła odmowy adresu IP działa na podstawie wartości PRIORITY we wpisie logu i że działa skonfigurowane działanie „ODRZUĆ”, ponieważ instrukcje pochodzi z reguły odmowy i odrzuconego adresu IP (jak pokazano poniżej).
8. Zweryfikuj regułę ograniczania liczby żądań
Sprawdź, czy reguła limitu liczby żądań działa, wysyłając wiele żądań w krótkim czasie, który przekracza zdefiniowany próg (5 żądań na minutę).
Gdy to zrobisz, kliknij wyświetl logi w usłudze Cloud Armor. Spowoduje to przejście do Cloud Logging, gdzie możesz filtrować logi według systemu równoważenia obciążenia, aby wyświetlać logi Cloud Armor na bieżąco.
Wpis ograniczający częstotliwość powinien wyglądać tak jak na zrzucie ekranu poniżej. Możemy sprawdzić, czy reguła limitu liczby żądań działa na podstawie wartości PRIORITY wynoszącej 3000 we wpisie logu, a po skonfigurowaniu działania „RATE BASED BAN” działa zgodnie z instrukcjami w regule ograniczania liczby żądań.
9. Czyszczenie środowiska
Pamiętaj, aby oczyścić utworzoną infrastrukturę, aby uniknąć kosztów nieużywanej infrastruktury.
Najszybszym sposobem jest usunięcie całego projektu w GCP, aby mieć pewność, że nie pozostaną nienadzorowane zasoby.Możesz jednak usunąć poszczególne zasoby, korzystając z tych poleceń:
System równoważenia obciążenia serwera proxy TCP
gcloud compute target-tcp-proxies delete my-tcp-lb
Grupa instancji
gcloud compute instance-groups unmanaged delete vm-ig1
2 testowe instancje maszyn wirtualnych zostały utworzone
gcloud compute instances delete Instance_name --zone=instance_zone
Usługa backendu
gcloud compute backend-services delete BACKEND_SERVICE_NAME
Reguły Cloud Armor w zasadzie
gcloud compute security-policies rules delete 1000 \ --security-policy=rate-limit-and-deny-tcp && gcloud compute security-policies rules delete 3000 \ --security-policy=rate-limit-and-deny-tcp
Zasada zabezpieczeń Cloud Armor
gcloud compute security-policies delete rate-limit-and-deny-tcp