Informacje o NodeLocal DNSCache w GKE

1. Przegląd

Pamięć podręczna DNS poprawia opóźnienie wyszukiwania DNS, ponieważ najpierw wysyła żądania DNS poda do lokalnej pamięci podręcznej w tym samym węźle. Dzięki temu czasy wyszukiwania DNS są bardziej spójne i można zmniejszyć liczbę zapytań DNS do kube-dns lub Cloud DNS.

W tym module sprawdzisz, jak NodeLocal DNSCache obsługuje ruch DNS w klastrze GKE. Sprawdzisz standardowy klaster GKE z wersją 1.34.1-gke.3720000 lub nowszą, aby potwierdzić, że jest domyślnie włączony. Następnie wyłącz tę funkcję, aby zobaczyć, jak zmieni się konfiguracja.

Cele

W tym laboratorium dowiesz się, jak wykonać następujące zadanie:

  • Tworzenie niestandardowej sieci VPC, podsieci i reguł zapory sieciowej
  • Wdrażanie standardowego klastra GKE Standard z kanałem szybkiego wydania
  • Przeprowadź test, aby sprawdzić, czy pamięć podręczna DNS LocalNode jest włączona
  • Wyłącz pamięć podręczną i sprawdź stan bez niej

2. Konfiguracja laboratorium

Samodzielne konfigurowanie środowiska

  1. Zaloguj się w konsoli Google Cloud i utwórz nowy projekt lub użyj istniejącego. Jeśli nie masz jeszcze konta Gmail ani Google Workspace, musisz je utworzyć.

295004821bab6a87.png

37d264871000675d.png

96d86d3d5655cdbe.png

  • Nazwa projektu to wyświetlana nazwa uczestników tego projektu. Jest to ciąg znaków, który nie jest używany przez interfejsy API Google. Zawsze możesz ją zaktualizować.
  • Identyfikator projektu jest unikalny we wszystkich projektach Google Cloud i nie można go zmienić po ustawieniu. Konsola Cloud automatycznie generuje unikalny ciąg znaków. Zwykle nie musisz się tym przejmować. W większości ćwiczeń z programowania musisz odwoływać się do identyfikatora projektu (zwykle oznaczanego jako PROJECT_ID). Jeśli wygenerowany identyfikator Ci się nie podoba, możesz wygenerować inny losowy identyfikator. Możesz też spróbować własnej nazwy i sprawdzić, czy jest dostępna. Po tym kroku nie można go zmienić i pozostaje on taki przez cały czas trwania projektu.
  • Warto wiedzieć, że istnieje trzecia wartość, numer projektu, której używają niektóre interfejsy API. Więcej informacji o tych 3 wartościach znajdziesz w dokumentacji.
  1. Następnie musisz włączyć płatności w konsoli Cloud, aby korzystać z zasobów i interfejsów API Google Cloud. Wykonanie tego ćwiczenia nie będzie kosztować dużo, a może nawet nic. Aby wyłączyć zasoby i uniknąć naliczania opłat po zakończeniu tego samouczka, możesz usunąć utworzone zasoby lub projekt. Nowi użytkownicy Google Cloud mogą skorzystać z bezpłatnego okresu próbnego, w którym mają do dyspozycji środki w wysokości 300 USD.

Uruchamianie Cloud Shell

Z Google Cloud można korzystać zdalnie na laptopie, ale w tym ćwiczeniu użyjesz Google Cloud Shell, czyli środowiska wiersza poleceń działającego w chmurze.

W konsoli Google Cloud kliknij ikonę Cloud Shell na pasku narzędzi w prawym górnym rogu:

Aktywowanie Cloud Shell

Uzyskanie dostępu do środowiska i połączenie się z nim powinno zająć tylko kilka chwil. Po zakończeniu powinno wyświetlić się coś takiego:

Zrzut ekranu terminala Google Cloud Shell pokazujący, że środowisko zostało połączone

Ta maszyna wirtualna zawiera wszystkie potrzebne narzędzia dla programistów. Zawiera również stały katalog domowy o pojemności 5 GB i działa w Google Cloud, co znacznie zwiększa wydajność sieci i usprawnia proces uwierzytelniania. Wszystkie zadania w tym ćwiczeniu w Codelabs możesz wykonać w przeglądarce. Nie musisz niczego instalować.

3. Konfigurowanie środowiska

Utworzymy niestandardową sieć VPC z regułami zapory sieciowej. Jeśli masz już VPC i projekt, możesz pominąć tę część.

Otwórz Cloud Shell w prawym górnym rogu konsoli. Skonfiguruj je w ten sposób: b51b80043d3bac90.png

  1. Włącz niektóre interfejsy API, których będziemy używać w tym laboratorium.
gcloud services enable dns.googleapis.com
gcloud services enable servicedirectory.googleapis.com
gcloud services enable container.googleapis.com
  1. Ustaw zmienne. Te zmienne to identyfikator projektu i nazwa sieci VPC (sieć VPC utworzysz w kroku 3).
export projectid=$(gcloud config get-value project)
export vpc_name=gke-cache-vpc
export subnet_name=mainsubnet
export region=us-east1
export zone=us-east1-b
export cluster_name=cache-gke-cluster
export channel=rapid

export machine_type=e2-standard-4
echo $projectid
echo $vpc_name
  1. Teraz utwórz niestandardową sieć VPC o nazwie gke-cache-vpc
gcloud compute networks create $vpc_name --subnet-mode=custom --project=$projectid \
--subnet-mode=custom \
--mtu=1460 \
--bgp-routing-mode=global
  1. Utwórz podsieć w nowej sieci VPC
gcloud compute networks subnets create $subnet_name \
    --network=$vpc_name \
    --range=10.0.88.0/24 \
    --region=$region \
    --enable-private-ip-google-access \
    --project=$projectid
  1. Dodawanie reguł zapory sieciowej do sieci VPC
gcloud compute firewall-rules create $vpc_name-allow-internal \
    --network=$vpc_name --allow=tcp,udp,icmp --source-ranges=10.0.88.0/24

gcloud compute firewall-rules create $vpc_name-allow-ssh \
    --network=$vpc_name --allow=tcp:22 --source-ranges=35.235.240.0/20

4. Tworzenie bramy NAT do komunikacji z internetem

Musimy przyznać wychodzący dostęp zewnętrzny do internetu, więc utwórzmy bramę Cloud NAT i dołączmy ją.

W Cloud Shell użyj tych poleceń:

  1. Tworzenie Cloud NAT i bramy NAT
gcloud compute routers create gke-nat-router --network=$vpc_name --region=$region

gcloud compute routers nats create gke-nat-gw \
    --router=gke-nat-router --region=$region \
    --auto-allocate-nat-external-ips --nat-all-subnet-ip-ranges

5. Wdrażanie i weryfikowanie klastra GKE

  1. W Google Cloud Shell utwórz klaster o nazwie cache-gke-cluster. W klastrach standardowych GKE w wersji 1.34.1-gke.3720000 i nowszych funkcja NodeLocal DNSCache jest domyślnie włączona. (Udostępnianie klastra powinno potrwać od 4 do 10 minut)
gcloud container clusters create $cluster_name \
--zone=$zone --network=$vpc_name --subnetwork=$subnet_name \
--release-channel=$channel --machine-type=$machine_type \
--enable-ip-alias
  1. Po utworzeniu klastra nawiąż połączenie:
gcloud container clusters get-credentials $cluster_name --zone $zone
  1. Teraz sprawdźmy, czy funkcja NodeLocal DNSCache jest włączona.

Te polecenia potwierdzają, że wersja to 1.34.1-gke.3720000 lub nowsza, a także że agent lokalny jest uruchomiony i usługi

kubectl version | grep "Server Version"

kubectl get pods -n kube-system -o wide | grep node-local-dns -w

kubectl get svc,endpoints -n kube-system -l k8s-app=kube-dns
  1. Następnie uruchom to polecenie (tworzy ono uprzywilejowany pod w sieci hosta, aby sprawdzić, czy reguły iptables węzła aktywnie przechwytują i kierują ruch DNS do lokalnej pamięci podręcznej):
export KUBEDNS_IP=$(kubectl get svc kube-dns -n kube-system -o jsonpath='{.spec.clusterIP}')

kubectl run node-inspector --quiet --rm -it --image=alpine --privileged --restart=Never \
  --overrides='{"spec": {"hostNetwork": true}}' -- \
  sh -c "apk add --no-cache iptables && iptables-save | grep -E '169.254.20.10|$KUBEDNS_IP'"

Na co zwrócić uwagę: poszukaj -j NOTRACK.. Potwierdza to, że ruch DNS omija tabelę śledzenia połączeń.

7135447929b7c48f.png

6. Wyłącz NodeLocal DNSCache i sprawdź

Teraz usuniemy optymalizację, aby zobaczyć, jak działa bez niej.

  1. Otwórz Cloud Shell i uruchom to polecenie: Uwaga: Spowoduje to ponowne utworzenie węzła, co zwykle zajmuje 3–5 minut na pulę węzłów, ponieważ GKE cyklicznie przetwarza instancje.
gcloud container clusters update $cluster_name --zone=$zone --update-addons=NodeLocalDNS=DISABLED --quiet

kubectl get pods -n kube-system -o wide | grep node-local-dns -w

W zestawie demonów nie powinno być żadnego z tych podów, ponieważ zostały one usunięte.

  1. Ponowne uruchomienie testu
kubectl run node-inspector --quiet --rm -it --image=alpine --privileged --restart=Never \
  --overrides='{"spec": {"hostNetwork": true}}' -- \
  sh -c "apk add --no-cache iptables && iptables-save | grep -E '169.254.20.10|$KUBEDNS_IP'"

Po wyłączeniu dodatku w danych wyjściowych nie będą już występować reguły -j NOTRACK ani wzmianki o adresie IP 169.254.20.10. Oznacza to, że nie korzystasz już z zalet pamięci podręcznej lokalnej.

4693ee556701e145.png

7. Czyszczenie danych

# 1. Delete the GKE Cluster
# This will remove the node and all system pods (including kube-dns)
gcloud container clusters delete $cluster_name --zone=$zone --quiet

# 2. Delete the Cloud NAT and Router
# It is best practice to remove these before the VPC
gcloud compute routers nats delete gke-nat-gw --router=gke-nat-router --region=$region --quiet
gcloud compute routers delete gke-nat-router --region=$region --quiet

# 3. Delete the Firewall Rules
gcloud compute firewall-rules delete $vpc_name-allow-internal $vpc_name-allow-ssh --quiet

# 4. Delete the Subnet and VPC
gcloud compute networks subnets delete $subnet_name --region=$region --quiet
gcloud compute networks delete $vpc_name --quiet

8. Kolejne kroki / Więcej informacji

Więcej informacji znajdziesz w dokumentacji zarządzania siecią GKE i przypadkach użycia.

Codelab Uzyskiwanie dostępu do czatu Gemini 3 Pro za pomocą pakietu Python SDK przez punkt końcowy Private Service Connect

Codelab Tworzenie agentów AI z użyciem ADK:podstawy

Przejdź do kolejnego modułu

Kontynuuj naukę o Google Cloud i zapoznaj się z tymi modułami Google Cloud Skills Boost: