Tunel działa, VM dociera do lokalnego serwera, a usługa Cloud Run przekracza limit czasu na tym samym hoście. To normalny punkt wyjścia tego zadania, a tunel rzadko jest tym, co nie działa. Wersja Cloud Run domyślnie nie znajduje się w Twojej VPC, a gdy się znajduje, używa własnych adresów źródłowych zamiast podsieci VM, którą już routowałeś. Poniższy runbook podłącza usługę, routuje jej rzeczywisty zakres źródłowy, a następnie dowodzi ścieżki z wersji, która obsłużyła żądanie. Wykonaj go w tej kolejności, ponieważ pominięcie pierwszego kroku jest powodem, dla którego tak wiele takich przypadków kończy się zmianą VPN, która niczego nie naprawia.

Podłącz wersję, zanim zaczniesz debugować tunel

Cloud Run obsługuje bezpośrednie wyjście VPC, które umieszcza ruch usługi w podsieci Twojej VPC bez łącznika Serverless VPC Access. Dla istniejącej usługi aktualizacja wygląda tak:

gcloud run services update SERVICE \
  --region=REGION --network=NETWORK --subnet=SUBNET \
  --vpc-egress=private-ranges-only

Zastąp symbole zastępcze, przejrzyj, co wdrożenie robi z ruchem na żywo, i wybierz podsieć w regionie usługi z wystarczającą pojemnością adresów i właściwymi uprawnieniami sieciowymi.

Wybierz tryb wyjścia pasujący do celu

private-ranges-only wysyła cele, które klasyfikuje jako prywatne, przez VPC. Nie oznacza to „wszystkiego, co osiągalne przez VPN”, a ta luka pojawia się, gdy lokalna usługa znajduje się w zakresie, którego to ustawienie tak nie klasyfikuje. Jeśli cel nie jest objęty, all-traffic jest drugim udokumentowanym trybem i wysyła wszystko przez VPC, łącznie z publicznymi zależnościami usługi. Wybierz świadomie i zapisz konsekwencję w rejestrze zmian.

Usługa, która już korzysta z łącznika, wymaga migracji, a nie przełącznika, więc zaplanuj ją, zamiast konfigurować oba.

Routuj źródło Cloud Run, a nie źródło VM

Bezpośrednie wyjście VPC przydziela tymczasowe adresy z wybranej podsieci, a strona lokalna musi zwracać ruch do tego zakresu. Trasa powrotna lub zezwolenie zapory napisane dla innej podsieci VM będą wyglądać poprawnie na schemacie i zawodzić w praktyce. Weź CIDR podsieci z VPC, a nie z pamięci, a następnie potwierdź, że krypto-ACL lub tabela routingu zdalnego urządzenia go zawiera.

Przy routingu dynamicznym sprawdź, co Cloud Router faktycznie ogłasza i co importuje VPC, w tym wszelkie niestandardowe zasady ogłaszania. Trasa, która istnieje w konsoli, ale nie została wybrana dla tego celu, to to samo co brak trasy.

Trzy warunki, które wszystkie muszą być spełnione

Działająca ścieżka wymaga wszystkiego poniższego, a każdy z nich zawodzi na swój sposób:

  • Trasa w VPC do lokalnego prefiksu przez zamierzone połączenie Cloud VPN.
  • Trasa powrotna po stronie lokalnej dla podsieci Cloud Run.
  • Zakres ochrony zapory i IPsec zezwalający na źródło, cel i port.

Brakująca trasa wygląda zwykle jak przekroczenie limitu czasu bez dowodów po stronie zdalnej. Problem z trasą powrotną wygląda jak żądanie, które dociera, i odpowiedź, która znika. Problem z zaporą lub selektorem może wyglądać jak odmowa albo ciche odrzucenie, w zależności od urządzenia. Ustalenie, którego z trzech przypadków masz, znacznie zawęża następne polecenie.

Nie umieszczaj jednego tymczasowego adresu Cloud Run na liście dozwolonych. Użyj zakresu podsieci i projektu autoryzacji dopasowanego do aplikacji.

Przetestuj wersję, która obsłużyła żądanie

Przed testem sprawdź wdrożone ustawienia sieciowe i podział ruchu, ponieważ aktualizacja może utworzyć nową wersję, podczas gdy żądania wciąż docierają do starszej. Następnie wykonaj tę samą operację, którą wykonuje żądanie użytkownika, z tej wersji. Jeśli celem jest prywatna nazwa hosta, sprawdź jej rozwiązanie w tym środowisku i uzyskany adres, ponieważ odpowiedź firmowego DNS z Twojego laptopa niczego nie dowodzi o przestrzeni nazw usługi. Zachowaj weryfikację nazwy hosta TLS i własne uwierzytelnianie zdalnej aplikacji.

Spodziewaj się udokumentowanych opóźnień połączenia przy starcie Direct VPC i daj klientowi strategię gotowości lub ponawiania, zamiast diagnozować każde zimne uruchomienie jako zepsuty tunel.

Wycofanie i czego to nie robi

Aby wycofać, przywróć ustawienia sieciowe i wyjścia usługi do poprzednich wartości i potwierdź, że wcześniejsza wersja nadal obsługuje ruch. Zachowaj polecenie gcloud w rejestrze zmian, ponieważ odwrotność częściowej zmiany nie jest oczywista sześć tygodni później. Usunięcie przypięcia VPC przywraca usługę na poprzednią ścieżkę wyjścia, co może być dokładnie tym, czego chcesz podczas incydentu.

Ten projekt obejmuje połączenia inicjowane przez Cloud Run i ich odpowiedzi. Nie daje sieci lokalnej adresowalnego gniazda wewnątrz usługi, ponieważ ekspozycja do wewnątrz jest decyzją ingress.

Powiązane artykuły