Изучите GKE NodeLocal DNSCache

1. Обзор

Кэширование DNS улучшает задержку поиска DNS, отправляя DNS-запросы подов сначала в локальный кэш на том же узле. Это делает время поиска DNS более стабильным и может уменьшить количество DNS-запросов к kube-dns или Cloud DNS.

В этой лабораторной работе вы проверите, как NodeLocal DNSCache обрабатывает DNS-трафик в кластере GKE. Вы проверите кластер GKE Standard, работающий под управлением версии 1.34.1-gke.3720000 и более поздних версий, чтобы убедиться, что эта функция включена по умолчанию. Затем отключите её, чтобы увидеть, как изменится конфигурация при отключении этой функции.

Цели

В этой лабораторной работе вы научитесь выполнять следующее задание:

  • Создайте пользовательские правила для VPC, подсети и брандмауэра.
  • Разверните стандартный кластер GKE Standard с каналом быстрого выпуска.
  • Выполните тест, чтобы убедиться, что кэш DNS LocalNode включен.
  • Отключите кэш и проверьте состояние без него.

2. Подготовка лаборатории

Настройка среды для самостоятельного обучения

  1. Войдите в консоль Google Cloud и создайте новый проект или используйте существующий. Если у вас еще нет учетной записи Gmail или Google Workspace, вам необходимо ее создать .

295004821bab6a87.png

37d264871000675d.png

96d86d3d5655cdbe.png

  • Название проекта — это отображаемое имя участников данного проекта. Это строка символов, не используемая API Google. Вы всегда можете его изменить.
  • Идентификатор проекта уникален для всех проектов Google Cloud и является неизменяемым (его нельзя изменить после установки). Консоль Cloud автоматически генерирует уникальную строку; обычно вам неважно, какая она. В большинстве практических заданий вам потребуется указать идентификатор вашего проекта (обычно обозначается как PROJECT_ID ). Если сгенерированный идентификатор вас не устраивает, вы можете сгенерировать другой случайный идентификатор. В качестве альтернативы вы можете попробовать свой собственный и посмотреть, доступен ли он. После этого шага его нельзя изменить, и он сохраняется на протяжении всего проекта.
  • К вашему сведению, существует третье значение — номер проекта , которое используется некоторыми API. Подробнее обо всех трех значениях можно узнать в документации .
  1. Далее вам потребуется включить оплату в консоли Cloud для использования ресурсов/API Cloud. Выполнение этого практического задания не потребует больших затрат, если вообще потребует. Чтобы отключить ресурсы и избежать дополнительных расходов после завершения этого урока, вы можете удалить созданные ресурсы или удалить проект. Новые пользователи Google Cloud имеют право на бесплатную пробную версию стоимостью 300 долларов США .

Запустить Cloud Shell

Хотя Google Cloud можно управлять удаленно с ноутбука, в этом практическом занятии вы будете использовать Google Cloud Shell — среду командной строки, работающую в облаке.

В консоли Google Cloud нажмите на значок Cloud Shell на панели инструментов в правом верхнем углу:

Активировать Cloud Shell

Подготовка и подключение к среде займут всего несколько минут. После завершения вы должны увидеть примерно следующее:

Скриншот терминала Google Cloud Shell, показывающий, что среда подключена.

Эта виртуальная машина содержит все необходимые инструменты разработки. Она предоставляет постоянный домашний каталог объемом 5 ГБ и работает в облаке Google, что значительно повышает производительность сети и аутентификацию. Вся работа в этом практическом задании может выполняться в браузере. Вам не нужно ничего устанавливать.

3. Настройка среды

Мы создадим пользовательскую VPC с правилами брандмауэра. Если у вас уже есть VPC и проект, вы можете пропустить этот шаг.

Откройте Cloud Shell, расположенный в верхней части консоли справа. И выполните следующие настройки: b51b80043d3bac90.png

  1. Включите некоторые из API, которые мы будем использовать в этой лабораторной работе.
gcloud services enable dns.googleapis.com
gcloud services enable servicedirectory.googleapis.com
gcloud services enable container.googleapis.com
  1. Задайте несколько переменных. Этими переменными являются идентификатор проекта и имя VPC (вы создадите VPC на шаге 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. Теперь создайте пользовательскую VPC с именем gke-cache-vpc
gcloud compute networks create $vpc_name --subnet-mode=custom --project=$projectid \
--subnet-mode=custom \
--mtu=1460 \
--bgp-routing-mode=global
  1. Создайте подсеть в новой 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. Добавьте правила брандмауэра в вашу 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. Создайте NAT-шлюз для интернет-связи.

Нам необходимо разрешить исходящий внешний доступ к интернету, поэтому давайте создадим шлюз Cloud NAT и подключим его.

В Cloud Shell используйте следующие команды.

  1. Создайте облачный NAT и 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. Разверните кластер GKE и проверьте его работу.

  1. В Google Cloud Shell создайте кластер с именем cache-gke-cluster . В кластерах GKE Standard версии 1.34.1-gke.3720000 и более поздних версий по умолчанию включен NodeLocal DNSCache. ( Создание кластера займет от 4 до 10 минут ).
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. После создания кластера подключитесь:
gcloud container clusters get-credentials $cluster_name --zone $zone
  1. Теперь давайте проверим, включен ли NodeLocal DNSCache.

Эти команды подтверждают, что версия — 1.34.1-gke.3720000 или более поздняя, ​​а также подтверждают, что локальный агент запущен и службы работают.

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. Далее выполните следующую команду ( это создаст привилегированный под в сети хоста, чтобы убедиться, что правила iptables узла активно перехватывают и направляют DNS-трафик в локальный кэш ).
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'"

На что обратить внимание: Ищите параметр -j NOTRACK. Это подтверждает, что DNS-трафик обходит таблицу отслеживания соединений.

7135447929b7c48f.png

6. Отключите NodeLocal DNSCache и проверьте.

Теперь мы отключим оптимизацию, чтобы посмотреть, как она работает без неё.

  1. Перейдите в Cloud Shell и выполните следующую команду. Примечание: это запустит процесс пересоздания узлов, который обычно занимает 3–5 минут для каждого пула узлов, поскольку GKE циклически перебирает экземпляры.
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

В списке демонов вы не должны видеть ни один из этих модулей, так как они были удалены.

  1. Повторный запуск теста
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'"

После отключения дополнения в выводе больше не будет содержаться правило -j NOTRACK или упоминание IP-адреса 169.254.20.10. Это означает, что вы больше не получаете преимуществ локального кэширования.

4693ee556701e145.png

7. Уборка

# 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. Дальнейшие шаги / Узнать больше

Вы можете узнать больше о документации по сетевым возможностям GKE и примерах их использования.

Codelab : Доступ к чату Gemini 3 Pro с использованием Python SDK через конечную точку Private Service Connect.

Codelab : Создание агентов искусственного интеллекта с помощью ADK:The Foundation

Пройдите следующую лабораторную работу.

Продолжите свое знакомство с Google Cloud и ознакомьтесь с другими лабораторными работами Google Cloud Skills Boost: