Looker PSA Southbound HTTPS Интернет NEG

1. Введение

Только экземпляры Looker (ядро Google Cloud), использующие частный доступ к сервисам для своего частного подключения, поддерживают конфигурацию с частным и публичным IP-адресами.

Экземпляр Looker (ядро Google Cloud), имеющий как частное IP-соединение (доступ к частным сервисам), так и публичное IP-соединение, имеет публичный URL-адрес, и весь входящий трафик будет проходить через публичное IP-соединение. Исходящий трафик маршрутизируется через вашу VPC, которую можно настроить таким образом, чтобы разрешать только трафик с частных IP-адресов, как показано на рисунке 1.

Рисунок 1

9f587c14791dd92e.png

Связь с github.com осуществляется через публичный IP-адрес, поэтому он недоступен из экземпляра Looker, развернутого в режиме Private или Public+Private.

В этом практическом задании вы выполните HTTPS-соединение с GitHub, используя внутренний балансировщик нагрузки TCP-прокси и группу конечных точек интернет-сети (NEG), вызываемую из Looker PSA.

Что вы узнаете

  • Требования к сети
  • Установите соединение с GitHub из Looker, используя функцию проверки соединения.

Что вам понадобится

5348de53f0a78a50.png

2. Что вы построите

Вам потребуется развернуть внутренний балансировщик нагрузки TCP-прокси и Internet NEG, настроенный с использованием разрешенного IP-адреса github.com, который будет использовать Cloud NAT для исходящего трафика в организации github.com, определяемые Looker.

3. Требования к сети

Ниже приведено описание сетевых требований:

Компоненты

Описание

VPC ($vpc_network)

Пользовательский режим VPC

подсеть правил пересылки

Используется для выделения IP-адреса для регионального внутреннего балансировщика нагрузки TCP-прокси.

Подсеть только для прокси

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

Интернет НЕГ

Ресурс, используемый для определения внешней серверной части для балансировщика нагрузки. Доступ к этой конечной точке возможен только через Cloud VPN или Cloud Interconnect.

Бэкенд-сервис

Серверная служба выступает в качестве связующего звена между вашим балансировщиком нагрузки и вашими серверными ресурсами. В данном руководстве серверная служба связана с интернет-сетью NEG.

Облачный маршрутизатор

Облачная NAT использует облачные маршрутизаторы для обеспечения возможностей плоскости управления, но не для управления сессиями BGP.

Облачный NAT

Региональная интернет-сеть NEG использует Cloud NAT для исходящего интернет-трафика.

4. Топология Codelab

c5871e5418d37f13.png

5. Настройка и требования

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

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

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.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 на панели инструментов в правом верхнем углу:

55efc1aaa7a4d3ad.png

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

7ffe5cbb04455448.png

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

6. Прежде чем начать

Включить API

Внутри Cloud Shell убедитесь, что идентификатор вашего проекта указан правильно:

gcloud config list project
gcloud config set project [YOUR-PROJECT-ID]
project=[YOUR-PROJECT-ID]
region=[YOUR-REGION]
vpc_network=[VPC Name]
echo $project
echo $region
echo $vpc-network

Включите все необходимые службы:

gcloud services enable compute.googleapis.com

7. Компоненты сети VPC

Сеть VPC

Для выполнения данного руководства необходимо наличие существующего экземпляра PSA Looker, поэтому соответствующая VPC уже создана.

Внутри Cloud Shell создайте правило пересылки для подсети:

gcloud compute networks subnets create psa-fr-subnet --network $vpc_network --range 172.16.20.0/28 --region $region --enable-private-ip-google-access

Внутри Cloud Shell создайте региональную подсеть, предназначенную только для прокси-сервера:

gcloud compute networks subnets create $region-proxyonly-subnet \
  --purpose=REGIONAL_MANAGED_PROXY \
  --role=ACTIVE \
  --region=$region \
  --network=$vpc_network \
  --range=10.10.10.0/24

Создайте публичный NAT-шлюз.

Шлюз NAT используется региональным внутренним балансировщиком нагрузки TCP-прокси для исходящего интернет-трафика с параметром конфигурации –endpoint-types=ENDPOINT_TYPE_MANAGED_PROXY_LB, поэтому тот же самый шлюз NAT не будет поддерживать исходящий интернет-трафик GCE/GKE. Разверните дополнительный шлюз NAT с параметром –endpoint-types=ENDPOINT_TYPE_VM для исходящего интернет-трафика GCE/GKE.

Внутри Cloud Shell создайте Cloud Router:

gcloud compute routers create $vpc_network-cloud-router --network $vpc_network --region $region

Внутри Cloud Shell создайте шлюз Cloud NAT, обеспечивающий исходящий интернет-трафик для балансировщика нагрузки TCP-прокси:

gcloud compute routers nats create $vpc_network-natgw \
  --router=$vpc_network-cloud-router \
  --endpoint-types=ENDPOINT_TYPE_MANAGED_PROXY_LB \
  --nat-custom-subnet-ip-ranges=$region-proxyonly-subnet \
  --auto-allocate-nat-external-ips \
  --region=$region

Зарезервировать IP-адрес балансировщика нагрузки

Внутри Cloud Shell зарезервируйте внутренний IP-адрес для балансировщика нагрузки, который позже будет использоваться в качестве DNS-записи A для github.com:

gcloud compute addresses create internet-neg-lb-ip \
  --region=$region \
  --subnet=psa-fr-subnet

Внутри Cloud Shell можно просмотреть зарезервированный IP-адрес:

gcloud compute addresses describe internet-neg-lb-ip \
  --region=$region | grep -i address:

Пример выходных данных:

user@cloudshell$ gcloud compute addresses describe internet-neg-lb-ip   --region=$region | grep -i address:
address: 172.16.20.2

8. Интернет НЕГ

Существует два способа настройки внешней конечной точки, на которую ссылается интернет-сервер NEG: INTERNET_FQDN_PORT или INTERNET_IP_PORT. Если выбран формат INTERNET_IP_PORT (Вариант 1), можно использовать только общедоступный IP-адрес, доступный через интернет; если выбран формат INTERNET_FQDN_PORT (Вариант 2), FQDN может быть преобразован либо в общедоступный IP-адрес, доступный через интернет, либо в частный IP-адрес в зависимости от области действия конечной точки: региональная или глобальная.

Вариант 1: Настройка интернет-сети NEG с использованием IP-адреса.

Для работы интернет-сервиса NEG требуется вычисленный IP-адрес Github.com, поэтому для оптимальной производительности откройте локальный терминал, выполните команду dig и получите IP-адрес github.com.

Пример, полученный с локального терминала, показывает вычисленный IP-адрес 140.82.113.4.

bash-3.2$ dig github.com
; <<>> DiG 9.10.6 <<>> github.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 64801
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;github.com.                        IN        A
;; ANSWER SECTION:
github.com.                60        IN        A        140.82.113.4
;; Query time: 409 msec
;; SERVER: ::1#53(::1)
;; WHEN: Thu Sep 26 15:50:45 CDT 2024
;; MSG SIZE  rcvd: 65

Создайте интернет-сервер NEG и установите параметр –network-endpoint-type в значение internet_ip_port.

Внутри Cloud Shell создайте интернет-сервер NEG, используемый для github.com:

gcloud compute network-endpoint-groups create github-internet-neg \
    --network-endpoint-type=INTERNET_IP_PORT \
    --network=$vpc_network \
    --region=$region

Внутри Cloud Shell обновите параметр Internet NEG github-internet-neg, указав полученный IP-адрес github.com и порт 443:

gcloud compute network-endpoint-groups update github-internet-neg \
    --add-endpoint="ip=[your-resolved-ip],port=443" \
    --region=$region

Пример:

gcloud compute network-endpoint-groups update github-internet-neg \
    --add-endpoint="ip=140.82.113.4,port=443" \
    --region=$region

Вариант 2: Настройка интернет-соединения NEG с использованием полного доменного имени (FQDN).

При желании вы можете создать интернет-сервер NEG и установить параметр –network-endpoint-type в значение internet_FQDN_port.

Внутри Cloud Shell создайте интернет-сервер NEG, используемый для github.com:

gcloud compute network-endpoint-groups create github-internet-neg \
    --network-endpoint-type=INTERNET_FQDN_PORT \
    --network=$vpc_network \
    --region=$region

Внутри Cloud Shell обновите адрес интернет-сервера NEG github-internet-neg, указав полное доменное имя github.com:

gcloud compute network-endpoint-groups update github-internet-neg \
    --add-endpoint="fqdn=github.com,port=443" \
    --region=$region

9. Создайте сервис Github.

Создание компонентов балансировки нагрузки

Внутри Cloud Shell выполните следующие действия:

gcloud compute backend-services create psa-backend-svc  --protocol=tcp --region=$region --load-balancing-scheme=INTERNAL_MANAGED

gcloud compute backend-services add-backend psa-backend-svc --network-endpoint-group=github-internet-neg --network-endpoint-group-region=$region --region=$region

В Cloud Shell создайте целевой TCP-прокси для маршрутизации запросов к вашему бэкэнд-сервису:

gcloud compute target-tcp-proxies create producer-lb-tcp-proxy \
      --backend-service=psa-backend-svc  \
      --region=$region

В приведенном ниже синтаксисе создайте правило пересылки (внутренний балансировщик нагрузки TCP-прокси).

В оболочке Cloud Shell выполните следующие действия:

gcloud compute forwarding-rules create psa-github-fr \
     --load-balancing-scheme=INTERNAL_MANAGED \
     --network-tier=PREMIUM \
     --network=$vpc_network \
     --subnet=psa-fr-subnet \
     --address=internet-neg-lb-ip \
     --target-tcp-proxy=producer-lb-tcp-proxy \
     --target-tcp-proxy-region=$region \
     --region=$region \
     --ports=443

10. Зона DNS GitHub

В следующем разделе вы создадите политику DNS-ответа для GitHub.com с записью A, содержащей IP-адрес внутреннего балансировщика нагрузки TCP-прокси.

Впоследствии DNS-пиринг будет использовать зону github.com совместно с Looker PSA, обеспечивая подключение к github через внутренний балансировщик нагрузки в сочетании с Internet NEG и Cloud NAT.

В Cloud Shell создайте зону политики ответов:

gcloud dns --project=$project response-policies create github-com --description="" --networks="$vpc_network"

В Cloud Shell создайте запись DNS A, содержащую IP-адрес балансировщика нагрузки TCP-прокси: [вставьте свой IP-адрес]:

gcloud dns --project=$project response-policies rules create github --response-policy="github-com" --dns-name="github.com." --local-data=name="github.com.",type="A",ttl=300,rrdatas="[insert-your-ip-address]"

Пример:

gcloud dns --project=$project response-policies rules create github --response-policy="github-com" --dns-name="github.com." --local-data=name="github.com.",type="A",ttl=300,rrdatas="172.16.20.2"

7b41b2f44609e5ed.png

Обновить DNS-пиринг

В этом разделе вы будете использовать синтаксис "gcloud services peered-dns-domains create" , который создает связанный DNS-домен для частного сервисного соединения, отправляющего запросы на записи в заданном пространстве имен, исходящие из сети VPC производителя сервиса, в сеть VPC потребителя для разрешения.

В Cloud Shell создайте DNS-домен, к которому Looker будет обращаться для поиска github.com:

gcloud services peered-dns-domains create github-com --project=$project --network=$vpc_network --dns-suffix=github.com.

11. Проверьте подключение к GitHub.

На следующих шагах вы используете Looker Console для создания проекта, проверяющего HTTPS-соединение с github.com.

12. Создайте новый проект

Включить режим разработки

В консоли Looker перейдите по следующему пути:

Включите режим разработки (в левом нижнем углу страницы). После выбора отобразится сообщение «Вы находитесь в режиме разработки».

70c9ded749decfbe.png

Создать новый проект

В консоли Cloud перейдите по следующему пути:

Разработка → Проекты

e8ae11e0392a776d.png

Выберите новый проект LookML

65a3c2573e97e1e9.png

Укажите название проекта, выберите «Пустой проект», затем «Создать проект».

9185808e001fa540.png

Выберите «Настроить Git».

42f5e51ce70642ad.png

Настройка Git

Обновите URL-адрес репозитория, указав данные вашего GitHub по протоколу HTTPS, обязательно добавьте к URL-адресу расширение .git, затем выберите «Продолжить».

f5c448f6659b8fc1.png

Пример:

4065ab1d196589f.png

Обновите выбранные параметры, указав ваше имя пользователя GitHub и персональный токен доступа (классический вариант), затем выберите «Проверить и завершить настройку».

1dc44d63c555a9ae.png

Выберите действия Git

b5903668a50a99ca.png

Выберите «Проверить соединение Git»

51b722e84f2df38c.png

Проверьте работоспособность теста подключения Git.

8fb7386b739f60be.png

13. Уборка

Удалите компоненты лабораторной работы из одного терминала Cloud Shell:

gcloud compute forwarding-rules delete psa-github-fr --region=$region -q

gcloud compute target-tcp-proxies delete producer-lb-tcp-proxy --region=$region -q

gcloud compute backend-services delete psa-backend-svc --region=$region -q

gcloud compute routers nats delete $vpc_network-natgw --router=$vpc_network-cloud-router --router-region=$region -q

gcloud compute routers delete $vpc_network-cloud-router --region=$region -q

gcloud compute network-endpoint-groups delete github-internet-neg --region=$region -q

gcloud compute addresses delete internet-neg-lb-ip --region=$region -q

gcloud compute networks subnets delete psa-fr-subnet $region-proxyonly-subnet --region=$region -q

gcloud services peered-dns-domains delete github-com --network=$vpc_network -q

gcloud dns --project=$project response-policies rules delete github --response-policy="github-com" -q

gcloud dns response-policies update github-com --networks= -q

gcloud dns response-policies delete github-com

14. Поздравляем!

Поздравляем, вы успешно настроили и подтвердили подключение к GitHub с помощью Looker Console.

Cosmopup считает, что Codelabs — это круто!!

c911c127bffdee57.jpeg

Что дальше?

Дополнительная литература и видеоматериалы

Справочная документация