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. Подготовка лаборатории
Настройка среды для самостоятельного обучения
- Войдите в консоль Google Cloud и создайте новый проект или используйте существующий. Если у вас еще нет учетной записи Gmail или Google Workspace, вам необходимо ее создать .



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

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

Эта виртуальная машина содержит все необходимые инструменты разработки. Она предоставляет постоянный домашний каталог объемом 5 ГБ и работает в облаке Google, что значительно повышает производительность сети и аутентификацию. Вся работа в этом практическом задании может выполняться в браузере. Вам не нужно ничего устанавливать.
3. Настройка среды
Мы создадим пользовательскую VPC с правилами брандмауэра. Если у вас уже есть VPC и проект, вы можете пропустить этот шаг.
Откройте Cloud Shell, расположенный в верхней части консоли справа. И выполните следующие настройки: 
- Включите некоторые из API, которые мы будем использовать в этой лабораторной работе.
gcloud services enable dns.googleapis.com
gcloud services enable servicedirectory.googleapis.com
gcloud services enable container.googleapis.com
- Задайте несколько переменных. Этими переменными являются идентификатор проекта и имя 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
- Теперь создайте пользовательскую VPC с именем
gke-cache-vpc
gcloud compute networks create $vpc_name --subnet-mode=custom --project=$projectid \
--subnet-mode=custom \
--mtu=1460 \
--bgp-routing-mode=global
- Создайте подсеть в новой 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
- Добавьте правила брандмауэра в вашу 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 используйте следующие команды.
- Создайте облачный 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 и проверьте его работу.
- В 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
- После создания кластера подключитесь:
gcloud container clusters get-credentials $cluster_name --zone $zone
- Теперь давайте проверим, включен ли 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
- Далее выполните следующую команду ( это создаст привилегированный под в сети хоста, чтобы убедиться, что правила 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-трафик обходит таблицу отслеживания соединений.

6. Отключите NodeLocal DNSCache и проверьте.
Теперь мы отключим оптимизацию, чтобы посмотреть, как она работает без неё.
- Перейдите в 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
В списке демонов вы не должны видеть ни один из этих модулей, так как они были удалены.
- Повторный запуск теста
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. Это означает, что вы больше не получаете преимуществ локального кэширования.

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: