Сеть в GCP — это не «галочки где-то в консоли», а то, что определяет главный вопрос: кто до кого может достучаться. От неё зависит и безопасность (не смотрит ли база наружу?), и работоспособность (видит ли приложение базу?). Хорошая новость: вся модель собирается из нескольких понятных кирпичиков. Если базовые понятия облака ещё не на руках, начните с основ GCP.

VPC и подсети

VPC (Virtual Private Cloud) — ваша изолированная сеть внутри GCP. Важная особенность, которая отличает GCP от AWS и Azure: сеть глобальна. Одна VPC охватывает сразу все регионы, а внутри неё вы создаёте региональные подсети (subnets) — диапазоны адресов вида 10.0.1.0/24, привязанные к региону. Ресурсы из подсетей в разных регионах при этом находятся в одной сети и общаются по внутренним адресам без дополнительных соединений.

gcloud compute networks create my-vpc --subnet-mode=custom
gcloud compute networks subnets create app --network=my-vpc \
  --region=europe-west1 --range=10.0.1.0/24

Это удобно: не нужно, как в других облаках, вручную связывать сети разных регионов — они уже в одной глобальной VPC.

Внешний и внутренний IP

Деление на «доступно снаружи» и «только внутри» проходит по ресурсу — есть ли у него внешний (external) IP.

  • Только внутренний IP — ресурс виден лишь внутри VPC. Сюда попадают приложения, базы, кэши: всё, до чего снаружи не должно быть доступа.
  • Внешний IP — ресурс доступен из интернета. Его выдают точкам входа: балансировщику, иногда bastion-хосту.

Правило: серверы и базы держат без внешнего IP, наружу смотрят только балансировщики и точки входа. Внешний IP базе «чтобы удобно подключаться с ноутбука» — прямая дыра: её тут же начнут сканировать.

Правила файрвола

Трафик фильтруют правила файрвола (firewall rules) — сетевой фильтр на уровне всей VPC. Их особенности:

  • правила бывают разрешающие и запрещающие, с приоритетами; более приоритетное перекрывает остальные;
  • цель правила (к кому оно применяется) задают не жёсткими IP, а сетевыми тегами или сервисными аккаунтами: например, «разрешить трафик на порт 5432 от машин с тегом app к машинам с тегом db». Адреса меняются — правила не ломаются.
gcloud compute firewall-rules create allow-app-to-db \
  --network=my-vpc --allow=tcp:5432 \
  --source-tags=app --target-tags=db

Cloud NAT: выход в интернет

Часто внутреннему сервису нужен исходящий доступ — скачать обновление, дёрнуть чужой API. Входящий при этом не нужен. Для этого служит Cloud NAT: управляемый механизм, который выпускает исходящий трафик из ресурсов без внешнего IP, но не пускает входящий извне. Он работает как односторонний турникет и, в отличие от аналогов в других облаках, не требует отдельной виртуальной машины-шлюза.

Приватный доступ и балансировщики

Private Google Access и Private Service Connect позволяют дотянуться до сервисов Google — Cloud Storage, баз, API — по приватной сети, не выходя в интернет. Трафик не покидает сеть Google.

Точками входа для пользователей служит Cloud Load Balancing. Его сильная сторона — глобальный HTTP(S)-балансировщик: один внешний адрес принимает пользователей со всего мира и направляет каждого в ближайший регион, где работает ваш сервис. Есть и региональные балансировщики уровня соединений (L4). Балансировщик прячет приложения во внутренней сети и раздаёт им трафик.

Где это применяется

Сеть — фундамент, на котором стоит всё остальное. Балансировщик с внешним адресом, приложение и база с внутренними IP, Cloud NAT для исходящих вызовов, правила файрвола, описывающие «кто до кого» — эту схему вы встретите почти в любом боевом развёртывании, продублированную по зонам.

Типичные ошибки новичков:

  • дают базе внешний IP — она доступна из интернета, прямая дыра;
  • ждут выхода наружу без Cloud NAT — исходящие вызовы зависают;
  • путают приоритеты правил файрвола — более общее правило перекрывает частное;
  • пишут правила через IP-адреса вместо тегов и сервисных аккаунтов — они ломаются при смене адресов.

Что учить дальше: кто и что имеет право делать с ресурсами — это Cloud IAM; где живут сервисы — в статье про вычисления; как поднимать сеть кодом — в Terraform. Аналогичная модель в AWS — сеть в AWS.