Использование Private Service Connect для публикации и использования сервисов

1. Введение

Private Service Connect позволяет производителю услуг предлагать услуги потребителю услуг в частном порядке. Private Service Connect предлагает следующие преимущества:

  • Сеть VPC производителя услуг может поддерживать более одного потребителя услуг.
  • Каждый потребитель подключается к внутреннему IP-адресу, который он определяет. Private Service Connect выполняет преобразование сетевых адресов (NAT) для маршрутизации запроса производителю службы.

45b90d50690dd111.png

Рисунок 2. Private Service Connect использует конечные точки и вложения служб, чтобы позволить потребителям услуг отправлять трафик из сети VPC потребителя в службы в сети VPC производителя услуг (нажмите, чтобы увеличить).

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

  • Преимущества подключения к частным услугам
  • Ключевые понятия для потребителей услуг
  • Ключевые концепции для производителей услуг
  • Создайте производственную среду
  • Предоставлять службу (среду производителя) через вложение службы.
  • Создайте потребительскую среду
  • Создайте правило переадресации в потребительской сети.
  • Проверка доступа потребителя TCP
  • Включить и проверить протокол прокси
  • Включить контроль доступа политикой

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

  • Знание внутренних балансировщиков нагрузки.
  • Возможность создания VPC в двух проектах

2. Преимущества подключения к частным услугам

Используя PSC, вы получаете несколько преимуществ по сравнению с использованием пиринга VPC:

Лучший контроль над частным IP-пространством

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

Улучшенная безопасность и изоляция

  • Как потребитель услуги только вы можете инициировать связь с производителем услуги. Такое однонаправленное соединение значительно упрощает настройку брандмауэра, но также снижает риск ложного трафика, исходящего от поставщика услуг.
  • Как поставщику услуг вам не нужно изменять правила брандмауэра в зависимости от диапазонов подсетей в VPC потребителя. Вы можете просто создать правила брандмауэра для диапазона IP-адресов NAT, настроенного для вашей службы.

Лучшая масштабируемость

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

3. Ключевые понятия для потребителей услуг

Вы можете использовать конечные точки Private Service Connect для использования сервисов, находящихся за пределами вашей сети VPC. Потребители услуг создают конечные точки Private Service Connect, которые подключаются к целевой службе.

Конечные точки

Конечные точки Private Service Connect используются для подключения к целевой службе. Конечные точки имеют внутренний IP-адрес в вашей сети VPC и основаны на ресурсе правила пересылки.

Вы отправляете трафик на конечную точку, которая перенаправляет его целям за пределами вашей сети VPC.

Цели

Конечные точки Private Service Connect имеют цель — службу, к которой вы хотите подключиться:

  • Пакет API :
  • Все API: большинство API Google.
  • VPC-SC: API, которые поддерживает VPC Service Controls.
  • Опубликованный сервис в другой сети VPC. Эта услуга может управляться вашей собственной организацией или третьей стороной.

Опубликованный сервис

Чтобы подключить конечную точку к службе производителя службы, вам понадобится вложение службы для этой службы. URI вложения службы имеет следующий формат: project/SERVICE_PROJECT/regions/REGION/serviceAttachments/SERVICE_NAME.

4. Ключевые концепции для производителей услуг

Чтобы сделать услугу доступной для потребителей, вы создаете одну или несколько выделенных подсетей , которые будут использоваться для преобразования сетевых адресов (NAT) IP-адресов потребителей. Затем вы создаете служебное вложение , которое относится к этим подсетям.

Подсети Private Service Connect

Чтобы предоставить доступ к службе, производитель службы сначала создает одну или несколько подсетей с целью Private Service Connect.

Когда запрос отправляется из потребительской сети VPC, исходный IP-адрес потребителя преобразуется с помощью исходного NAT (SNAT) в IP-адрес, выбранный из одной из подсетей Private Service Connect.

Если вы хотите сохранить информацию об IP-адресе потребительского подключения, см. Просмотр информации о потребительском подключении .

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

Подсеть Private Service Connect должна содержать хотя бы один IP-адрес для каждых 63 потребительских виртуальных машин, чтобы каждой потребительской виртуальной машине было выделено 1024 исходных кортежа для преобразования сетевых адресов.

Минимальный размер подсети Private Service Connect — /24.

Сервисные вложения

Производители услуг предоставляют свои услуги через вложение службы.

  • Чтобы предоставить доступ к службе, производитель службы создает вложение службы, которое ссылается на правило переадресации балансировщика нагрузки службы.
  • Чтобы получить доступ к службе, потребитель службы создает конечную точку, которая ссылается на вложение службы.

Настройки подключения

Когда вы создаете услугу, вы выбираете, как сделать ее доступной. Есть два варианта:

  • Автоматически принимать подключения для всех проектов — любой потребитель сервиса может настроить конечную точку и автоматически подключиться к сервису.
  • Принимать соединения для выбранных проектов — потребители службы настраивают конечную точку для подключения к службе, а производитель службы принимает или отклоняет запросы на подключение.

5. Тестовая среда

Потребительская сеть состоит из статического IP-адреса TCP, используемого для отправки запросов производителю службы, в дополнение к приложению целевой службы, которое сопоставляется с вложением службы производителя (опубликованной службой).

Теперь давайте посмотрим на сеть производителей. Обратите внимание, что сеть производителя не имеет сопоставления с сетью потребителей. Вместо этого сеть производителя содержит вложение службы (опубликованную службу), которая используется потребителем для услуг. Приложением службы производителя в нашей лаборатории является внутренний балансировщик нагрузки уровня 4 (правило пересылки производителя), сопоставленный с серверной службой, поддерживающей TCP-приложение.

Подсеть NAT и связанные с ней правила брандмауэра разрешают связь с приложением-производителем.

28b09284a99eb60b.png

Самостоятельная настройка среды

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

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

Запомните идентификатор проекта — уникальное имя для всех проектов Google Cloud (имя, указанное выше, уже занято и не подойдет вам, извините!). Позже в этой лаборатории он будет называться PROJECT_ID .

  1. Далее вам необходимо включить биллинг в Cloud Console, чтобы использовать ресурсы Google Cloud.

Прохождение этой лаборатории кода не должно стоить много, если вообще стоит. Обязательно следуйте всем инструкциям в разделе «Очистка», в которых рассказывается, как отключить ресурсы, чтобы вам не приходилось нести расходы, выходящие за рамки этого руководства. Новые пользователи Google Cloud имеют право на участие в программе бесплатной пробной версии стоимостью 300 долларов США .

Запустить Cloud Shell

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

В консоли GCP щелкните значок Cloud Shell на верхней правой панели инструментов:

bce75f34b2c53987.png

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

f6ef2b5f13479f3a.png

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

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

Codelab требует двух проектов, хотя это не является обязательным требованием для PSC. Обратите внимание на ссылки для поддержки одного или нескольких проектов.

Единый проект — обновление проекта для поддержки сети производителей и потребителей.

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

gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
prodproject=YOUR-PROJECT-NAME
consumerproject=YOUR-PROJECT-NAME
echo $prodproject
echo $consumerproject

Несколько проектов – обновите проект для поддержки сети производителей.

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

gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
prodproject=YOUR-PROJECT-NAME
echo $prodproject

7. Создайте сеть VPC для производителей.

Примечание. В следующем разделе выполните обновления конфигурации в проекте, содержащем вашу службу Producer.

Сеть VPC

Из Cloud Shell

gcloud compute networks create vpc-demo-producer --project=$prodproject --subnet-mode=custom

Создать подсеть

Из Cloud Shell

gcloud compute networks subnets create vpc-demo-us-west2 --project=$prodproject --range=10.0.2.0/24 --network=vpc-demo-producer --region=us-west2

Создать экземпляр Cloud NAT

Cloud NAT — это не тот NAT, который используется для PSC. Облачный NAT явно используется для доступа в Интернет для загрузки пакетов приложений.

Создать облачный маршрутизатор

Из Cloud Shell

gcloud compute routers create crnatprod --network vpc-demo-producer --region us-west2

Создать облачный NAT

Из Cloud Shell

gcloud compute routers nats create cloudnatprod --router=crnatprod --auto-allocate-nat-external-ips --nat-all-subnet-ip-ranges --enable-logging --region us-west2

8. Создание вычислительных экземпляров

В Cloud Shell создайте экземпляр www-01.

gcloud compute instances create www-01 \
    --zone=us-west2-a \
    --image-family=debian-9 \
    --image-project=debian-cloud \
    --subnet=vpc-demo-us-west2 --no-address \
    --metadata=startup-script='#! /bin/bash
apt-get update
apt-get install tcpdump -y
apt-get install apache2 -y
a2ensite default-ssl
apt-get install iperf3 -y
a2enmod ssl
vm_hostname="$(curl -H "Metadata-Flavor:Google" \
http://169.254.169.254/computeMetadata/v1/instance/name)"
filter="{print \$NF}"
vm_zone="$(curl -H "Metadata-Flavor:Google" \
http://169.254.169.254/computeMetadata/v1/instance/zone \
| awk -F/ "${filter}")"
echo "Page on $vm_hostname in $vm_zone" | \
tee /var/www/html/index.html
systemctl restart apache2
iperf3 -s -p 5050'

В Cloud Shell создайте экземпляр www-02.

gcloud compute instances create www-02 \
    --zone=us-west2-a \
    --image-family=debian-9 \
    --image-project=debian-cloud \
    --subnet=vpc-demo-us-west2 --no-address \
    --metadata=startup-script='#! /bin/bash
apt-get update
apt-get install tcpdump -y
apt-get install apache2 -y
a2ensite default-ssl
apt-get install iperf3 -y
a2enmod ssl
vm_hostname="$(curl -H "Metadata-Flavor:Google" \
http://169.254.169.254/computeMetadata/v1/instance/name)"
filter="{print \$NF}"
vm_zone="$(curl -H "Metadata-Flavor:Google" \
http://169.254.169.254/computeMetadata/v1/instance/zone \
| awk -F/ "${filter}")"
echo "Page on $vm_hostname in $vm_zone" | \
tee /var/www/html/index.html
systemctl restart apache2
iperf3 -s -p 5050'

9. Создайте неуправляемую группу экземпляров.

Создайте неуправляемую группу экземпляров, состоящую из www-01 и www-02.

Из Cloud Shell

gcloud compute instance-groups unmanaged create vpc-demo-ig-www --zone=us-west2-a

gcloud compute instance-groups unmanaged add-instances vpc-demo-ig-www --zone=us-west2-a --instances=www-01,www-02

gcloud compute health-checks create http hc-http-80 --port=80

10. Создайте серверные службы TCP, правило пересылки и брандмауэр.

В Cloud Shell создайте серверную службу.

gcloud compute backend-services create vpc-demo-www-be-tcp --load-balancing-scheme=internal --protocol=tcp --region=us-west2 --health-checks=hc-http-80

gcloud compute backend-services add-backend vpc-demo-www-be-tcp --region=us-west2 --instance-group=vpc-demo-ig-www --instance-group-zone=us-west2-a

В Cloud Shell создайте правило переадресации.

gcloud compute forwarding-rules create vpc-demo-www-ilb-tcp --region=us-west2 --load-balancing-scheme=internal --network=vpc-demo-producer --subnet=vpc-demo-us-west2 --address=10.0.2.10 --ip-protocol=TCP --ports=all --backend-service=vpc-demo-www-be-tcp --backend-service-region=us-west2

В Cloud Shell создайте правило брандмауэра, чтобы включить проверку работоспособности серверной части.

gcloud compute firewall-rules create vpc-demo-health-checks --allow tcp:80,tcp:443 --network vpc-demo-producer --source-ranges 130.211.0.0/22,35.191.0.0/16 --enable-logging

Чтобы разрешить IAP подключаться к вашим экземплярам виртуальных машин, создайте правило брандмауэра, которое:

  • Применяется ко всем экземплярам виртуальных машин, доступ к которым вы хотите сделать с помощью IAP.
  • Разрешает входящий трафик из диапазона IP 35.235.240.0/20. Этот диапазон содержит все IP-адреса, которые IAP использует для пересылки TCP.

Из Cloud Shell

gcloud compute firewall-rules create psclab-iap-prod --network vpc-demo-producer --allow tcp:22 --source-ranges=35.235.240.0/20 --enable-logging

11. Создайте подсеть TCP NAT.

Из Cloud Shell

gcloud compute networks subnets create vpc-demo-us-west2-psc-tcp --network=vpc-demo-producer --region=us-west2 --range=192.168.0.0/24 --purpose=private-service-connect

12. Создайте правила прикрепления службы TCP и брандмауэра.

В Cloud Shell создайте вложение службы TCP.

gcloud compute service-attachments create vpc-demo-psc-west2-tcp --region=us-west2 --producer-forwarding-rule=vpc-demo-www-ilb-tcp --connection-preference=ACCEPT_AUTOMATIC --nat-subnets=vpc-demo-us-west2-psc-tcp

Проверьте вложение службы TCP

gcloud compute service-attachments describe vpc-demo-psc-west2-tcp --region us-west2

В Cloud Shell создайте правило брандмауэра, разрешающее доступ подсети TCP NAT к серверной части ILB.

gcloud compute --project=$prodproject firewall-rules create vpc-demo-allowpsc-tcp --direction=INGRESS --priority=1000 --network=vpc-demo-producer --action=ALLOW --rules=all --source-ranges=192.168.0.0/24 --enable-logging

13. Создайте сеть VPC для потребителей.

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

В следующем разделе потребительский VPC настраивается в отдельном проекте. Связь между сетью потребителя и производителя осуществляется через привязку службы, определенную в сети потребителей.

Сеть VPC

Codelab требует двух проектов, хотя это не является обязательным требованием для PSC. Обратите внимание на ссылки для поддержки одного или нескольких проектов.

Единый проект — обновление проекта для поддержки сети производителей и потребителей.

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

gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
consumerproject=YOUR-PROJECT-NAME
prodproject=YOUR-PROJECT-NAME
echo $prodproject
echo $consumerproject

Несколько проектов — обновление проекта для поддержки потребительской сети.

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

gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
consumerproject=YOUR-PROJECT-NAME
echo $consumerproject

Из Cloud Shell

gcloud compute networks create vpc-demo-consumer --project=$consumerproject --subnet-mode=custom

Создать подсеть для PSC

Из Cloud Shell

gcloud compute networks subnets create consumer-subnet --project=$consumerproject  --range=10.0.60.0/24 --network=vpc-demo-consumer --region=us-west2

Создайте статический IP-адрес для TCP-приложений.

Из Cloud Shell

gcloud compute addresses create vpc-consumer-psc-tcp --region=us-west2 --subnet=consumer-subnet --addresses 10.0.60.100

Создать правила брандмауэра

Чтобы разрешить IAP подключаться к вашим экземплярам виртуальных машин, создайте правило брандмауэра, которое:

  • Применяется ко всем экземплярам виртуальных машин, доступ к которым вы хотите сделать с помощью IAP.
  • Разрешает входящий трафик из диапазона IP 35.235.240.0/20. Этот диапазон содержит все IP-адреса, которые IAP использует для пересылки TCP.

Из Cloud Shell

gcloud compute firewall-rules create psclab-iap-consumer --network vpc-demo-consumer --allow tcp:22 --source-ranges=35.235.240.0/20 --enable-logging

Хотя это и не требуется для PSC, создайте выходное правило брандмауэра для мониторинга трафика PSC потребителя к сервисному вложению производителя.

gcloud compute --project=$consumerproject firewall-rules create vpc-consumer-psc --direction=EGRESS --priority=1000 --network=vpc-demo-consumer --action=ALLOW --rules=all --destination-ranges=10.0.60.0/24 --enable-logging

Создать экземпляр Cloud NAT

Cloud NAT — это не тот NAT, который используется для PSC. Cloud NAT явно используется для доступа в Интернет для загрузки пакетов приложений.

Создать облачный маршрутизатор

Из Cloud Shell

gcloud compute routers create crnatconsumer --network vpc-demo-consumer --region us-west2

Создать облачный NAT

Из Cloud Shell

gcloud compute routers nats create cloudnatconsumer --router=crnatconsumer --auto-allocate-nat-external-ips --nat-all-subnet-ip-ranges --enable-logging --region us-west2

14. Создайте тестовый экземпляр виртуальной машины.

Из Cloud Shell

gcloud compute instances create test-instance-1 \
    --zone=us-west2-a \
    --image-family=debian-9 \
    --image-project=debian-cloud \
    --subnet=consumer-subnet --no-address \
    --metadata=startup-script='#! /bin/bash
apt-get update
apt-get install iperf3 -y
apt-get install tcpdump -y'

15. Создайте вложение службы TCP.

Из Cloud Shell

gcloud compute forwarding-rules create vpc-consumer-psc-fr-tcp --region=us-west2 --network=vpc-demo-consumer --address=vpc-consumer-psc-tcp --target-service-attachment=projects/$prodproject/regions/us-west2/serviceAttachments/vpc-demo-psc-west2-tcp

16. Валидация

Мы будем использовать журналы CURL, TCPDUMP и брандмауэра для проверки связи между потребителем и производителем.

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

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

В облачной оболочке Consumer VPC определите правило переадресации TCP и статический IP-адрес.

gcloud compute forwarding-rules describe vpc-consumer-psc-fr-tcp --region us-west2

Выход:

IPAddress: 10.0.60.100
IPProtocol: TCP
creationTimestamp: '2021-07-14T13:34:23.359-07:00'
id: '2768158450402915488'
kind: compute#forwardingRule
labelFingerprint: 42WmSpB8rSM=
name: vpc-consumer-psc-fr-tcp
<snip>

17. Проверка TCP

Примечание. В следующем разделе выполните обновления конфигурации в проекте, содержащем вашу службу Producer.

В Producer Project определите «www-01» и «www-02» и запустите по одному сеансу SSH для каждого экземпляра.

6d0bb8c5cb115876.png

Из «www-01» выполните TCPDUMP для мониторинга NAT.

sudo tcpdump -i any net 192.168.0.0/16 -n

Из «www-02» выполните TCPDUMP для мониторинга NAT.

sudo tcpdump -i any net 192.168.0.0/16 -n

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

В Consumer Project определите «test-instance-1» и запустите два сеанса.

Из сеанса «test-instance-1» выполняется TCPDUMP для мониторинга потребителя.

sudo tcpdump -i any host 10.0.60.100 -n

Из второго сеанса «test-instance-1» выполняется проверка TCP.

curl -v 10.0.60.100 

18. Наблюдения – Потребитель

Из сеанса «test-instance-1» два CURL прошли успешно и дали 200 OK.

@test-instance-1:~$ curl -v 10.0.60.100 
* Rebuilt URL to: 10.0.60.100/
*   Trying 10.0.60.100...
* TCP_NODELAY set
* Connected to 10.0.60.100 (10.0.60.100) port 80 (#0)
> GET / HTTP/1.1
> Host: 10.0.60.100
> User-Agent: curl/7.52.1
> Accept: */*
> 
< HTTP/1.1 200 OK
< Date: Wed, 14 Jul 2021 21:20:22 GMT
< Server: Apache/2.4.25 (Debian)
< Last-Modified: Wed, 14 Jul 2021 20:09:09 GMT
< ETag: "1d-5c71aed5edabd"
< Accept-Ranges: bytes
< Content-Length: 29
< Content-Type: text/html
< 
Page on www-01 in us-west2-a
* Curl_http_done: called premature == 0
* Connection #0 to host 10.0.60.100 left intact

Из сеанса «test-instance-1» один TCPDUMP идентифицирует экземпляр виртуальной машины → связь и ответ статического IP TCP.

21:20:22.572052 IP 10.0.60.2.59432 > 10.0.60.100.80: Flags [P.], seq 1:76, ack 1, win 222, options [nop,nop,TS val 634554 ecr 998739], length 75: HTTP: GET / HTTP/1.1

21:20:22.572688 IP 10.0.60.100.80 > 10.0.60.2.59432: Flags [P.], seq 1:257, ack 76, win 220, options [nop,nop,TS val 998739 ecr 634554], length 256: HTTP: HTTP/1.1 200 OK

Журналирование брандмауэра

С помощью обозревателя журналов проверьте, что правило брандмауэра "vpc-consumner-psc" фиксирует поток между экземпляром виртуальной машины и статическим IP-адресом.

  1. В Cloud Console выберите «Определить ведение журнала операций» → «Проводник журналов».
  2. В поле «Запрос» обновите запись ниже, указав свой потребительский проект, и выберите «Выполнить запрос».

logName:(projects/yourconsumerproject/logs/compute.googleapis.com%2Ffirewall) И jsonPayload.rule_details.reference:("network:vpc-demo-consumer/firewall:vpc-consumer-psc")

  1. Результаты запроса предоставляют следующее для каждого предоставленного снимка экрана

b573c878a8d6d01f.png

  1. Разверните журнал и определите выходные данные, представленные ниже. Обратите внимание на dest_ip: 10.0.60.100 — это СТАТИЧЕСКИЙ TCP-IP, а src_ip: 10.0.60.2 — это IP-адрес экземпляра виртуальной машины.

1b4f46b3e61f6f12.png

19. Наблюдения - Продюсер

Из внутреннего экземпляра «www-01» или «www-02» наблюдается следующая связь между подсетью TCP NAT и TCP ILB.

21:20:22.572186 IP 192.168.0.2.1024 > 10.0.2.10.80: Flags [P.], seq 1:76, ack 1, win 222, options [nop,nop,TS val 634554 ecr 998739], length 75: HTTP: GET / HTTP/1.1

21:20:22.572679 IP 10.0.2.10.80 > 192.168.0.2.1024: Flags [P.], seq 1:257, ack 76, win 220, options [nop,nop,TS val 998739 ecr 634554], length 256: HTTP: HTTP/1.1 200 OK

20. Журналирование брандмауэра

С помощью обозревателя журналов проверьте, что правило брандмауэра «vpc-demo-allowpsc-tcp» захватывает поток TCP NAT и TCP ILB, выполнив следующие действия:

  1. В Cloud Console выберите «Определить ведение журнала операций» → «Проводник журналов».
  2. В поле «Запрос» обновите запись ниже, указав свой prodproject, и выберите «Выполнить запрос».

logName:(projects/yourprodproject/logs/compute.googleapis.com%2Ffirewall) И jsonPayload.rule_details.reference:("network:vpc-demo-producer/firewall:vpc-demo-allowpsc-tcp")

  1. Результаты запроса предоставляют следующее для каждого предоставленного снимка экрана

8ce6b0d17d76ad6d.png

  1. Разверните журнал и найдите выходные данные, представленные ниже. Обратите внимание на TCP ILB dest_ip: 10.0.2.10 и NAT TCP source_range (192.168.0.0/24) и соответствующий src_ip: 192.168.0.2.

e157a7af8cb667e.png

21. Включить прокси-протокол.

По умолчанию Private Service Connect преобразует исходный IP-адрес потребителя в адрес в одной из подсетей Private Service Connect в сети VPC поставщика услуг. Если вместо этого вы хотите видеть исходный IP-адрес источника потребителя, вы можете включить протокол PROXY. Если протокол PROXY включен, вы можете получить IP-адрес источника потребителя и идентификатор соединения PSC из заголовка протокола PROXY.

e9d1c49971b10ed0.png

Ссылка на документацию

Удаление опубликованных служб производителей

Примечание. В следующем разделе выполните обновления конфигурации в проекте, содержащем вашу службу Producer.

Из облачной оболочки удалите вложения службы TCP.

gcloud compute service-attachments delete vpc-demo-psc-west2-tcp --region=us-west2 --quiet

Из облачной оболочки удаляются вложения службы проверки (в списке 0 элементов)

gcloud compute service-attachments list

Создать вложение службы TCP с включенным прокси-протоколом

gcloud compute service-attachments create vpc-demo-psc-west2-tcp --region=us-west2 \
--producer-forwarding-rule=vpc-demo-www-ilb-tcp \
--connection-preference=ACCEPT_AUTOMATIC \
--nat-subnets=vpc-demo-us-west2-psc-tcp \
--enable-proxy-protocol

Из облачной оболочки вложения службы проверки создаются с включенным прокси-протоколом (true)

gcloud compute service-attachments describe vpc-demo-psc-west2-tcp --region=us-west2 | grep -i enableProxyProtocol:

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

Из облачной оболочки удалите правила переадресации TCP.

gcloud compute forwarding-rules delete vpc-consumer-psc-fr-tcp --region=us-west2 --quiet

Воссоздайте правила пересылки TCP, чтобы связать их с ранее созданным (производителем) вложением службы.

В облачной оболочке создайте правило переадресации TCP.

gcloud compute forwarding-rules create vpc-consumer-psc-fr-tcp \
--region=us-west2 --network=vpc-demo-consumer \
--address=vpc-consumer-psc-tcp \
--target-service-attachment=projects/$prodproject/regions/us-west2/serviceAttachments/vpc-demo-psc-west2-tcp

Проверка протокола прокси

Примечание. В следующем разделе выполните обновления конфигурации в проекте, содержащем вашу службу Producer.

В Producer Project определите «www-01» и «www-02» и запустите по одному сеансу для каждого экземпляра.

6d0bb8c5cb115876.png

Из «www-01» выполните TCPDUMP для мониторинга NAT.

sudo tcpdump -nnvvXSs 1514 net 192.168.0.0/16

Из «www-02» выполните TCPDUMP для мониторинга NAT.

sudo tcpdump -nnvvXSs 1514 net 192.168.0.0/16

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

В потребительском проекте определите «test-instance-1» и запустите один сеанс.

Из сеанса «test-instance-1» выполните завиток

curl 10.0.60.100 

Наблюдения - Потребитель

Обратите внимание: если протокол PROXY v2 включен, но приложение не настроено для его поддержки, при подключении с клиента будет отображаться сообщение об ошибке, как показано в примере ниже. Обновления Apache необходимы для размещения дополнительного заголовка прокси-сервера v2 и не рассматриваются в лаборатории кода.

Из сеанса «test-instance-1» CURL выдаст ожидаемые 400 неверных запросов, хотя внутренний запрос успешен.

@test-instance-1:~$ curl 10.0.60.100 
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>400 Bad Request</title>
</head><body>
<h1>Bad Request</h1>
<p>Your browser sent a request that this server could not understand.<br />
</p>
<hr>
<address>Apache/2.4.25 (Debian) Server at www-02.c.deepakmichaelprod.internal Port 80</address>

Наблюдения - Потребитель

Из внутреннего экземпляра «www-01» или «www-02» наблюдается следующая связь между подсетью TCP NAT и TCP ILB с помощью прокси-протокола, встроенного в захват.

В большинстве случаев третий пакет в tcpdump содержит соответствующие информационные элементы протокола прокси (IE). При необходимости идентифицируйте пакет с 39 байтами, содержащими протокол прокси-сервера IE.

192.168.0.3.1025 > 10.0.2.10.80: Flags [P.], cksum 0xb617 (correct), seq 2729454396:2729454435, ack 1311105819, win 28160, length 39: HTTP
        0x0000:  4500 004f 0000 4000 4006 6df4 c0a8 0003  E..O..@.@.m.....
        0x0010:  0a00 020a 0401 0050 a2b0 2b3c 4e25 e31b  .......P..+<N%..
        0x0020:  5018 6e00 b617 0000 0d0a 0d0a 000d 0a51  P.n............Q
        0x0030:  5549 540a 2111 0017 0a00 3c02 0a00 3c64  UIT.!.....<...<d
        0x0040:  8138 0050 e000 0800 9b34 d70a 003c 64    .8.P.....4...<d

Определите сигнатуру протокола PROXY: 0d0a0d0a000d0a515549540a в захвате пакета.

Определив сигнатуру протокола PROXY, можно разобрать ее и декодировать поля, как показано ниже:

Подпись протокола ПРОКСИ: 0d0a0d0a000d0a515549540a

Другие поля протокола ПРОКСИ: 21 11 00 17

IP-адреса и порты: 0a003c02 0a003c64 8138 0050

Тип TLV: e0

Длина TLV: 00 08

Идентификатор pscConnection: 009b34d70a003c64

Шестигранник

Десятичный / IP

Подпись протокола ПРОКСИ

0d0a0d0a000d0a515549540a

Версия, протокол, длина

21 11 0017

Исходный IP-адрес

0a003c02

10.0.60.2

Dst IP

0a003c64

10.0.60.100

Исходный порт

8138

33080

Dst-порт

0050

80

Тип TLV (PP2_TYPE_GCP)

e0

Длина TLV

0008

pscConnectionId

00004dde290a003c64

43686719580552292

pscConnectionId также можно проверить, описав правило переадресации потребителя, как показано ниже, и убедившись, что оно соответствует:

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

Из облачной оболочки опишите правила пересылки TCP.

gcloud compute forwarding-rules describe vpc-consumer-psc-fr-tcp --region=us-west2

Вывод, описывающий pscConnectionID

$ gcloud compute forwarding-rules describe vpc-consumer-psc-fr-tcp --region=us-west2
IPAddress: 10.0.60.100
IPProtocol: TCP
creationTimestamp: '2021-07-14T16:50:31.766-07:00'
id: '4443494505307621032'
kind: compute#forwardingRule
labelFingerprint: 42WmSpB8rSM=
name: vpc-consumer-psc-fr-tcp
network: https://www.googleapis.com/compute/v1/projects/deepakmichaeldev/global/networks/vpc-demo-consumer
networkTier: PREMIUM
pscConnectionId: '43686719580552292'
pscConnectionStatus: ACCEPTED

22. Политика подключения

Вы можете переключаться между автоматическим и явным принятием проекта для опубликованной службы.

Переход от автоматического принятия к явному принятию не влияет на конечные точки потребителей, которые подключались к службе до этого изменения. Существующие конечные точки потребителя могут подключаться к опубликованной службе до тех пор, пока вложение службы не будет удалено. Новые конечные точки потребителей должны быть приняты, прежде чем они смогут подключиться к службе. Дополнительные сведения см. в разделе Управление запросами на доступ к опубликованной службе .

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

Примечание. В следующем разделе выполните обновления конфигурации в проекте, содержащем вашу службу Producer.

Из облачной оболочки службы производителей обновите политику предпочтений подключения с автоматического принятия на принятие вручную.

gcloud compute service-attachments update vpc-demo-psc-west2-tcp --region=us-west2 --connection-preference ACCEPT_MANUAL

Определите статус конечной точки, перейдя в «Сетевые службы» → «Подключение частных служб» → «Опубликованные службы» → «vpc-demo-psc-west2-tcp» → «Подключенные проекты».

e1d90d1563e10731.png

Обратите внимание: статус потребительского проекта в разделе «Подключенные проекты» изменен на «Ожидание».

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

gcloud compute service-attachments update vpc-demo-psc-west2-tcp --region=us-west2 --consumer-accept-list $consumerproject=20

Определите статус конечной точки, перейдя в «Сетевые службы» → «Подключение частных служб» → «Опубликованные службы» → «vpc-demo-psc-west2-tcp» → «Подключенные проекты».

35cba9ac640594a2.png

Обратите внимание: статус потребительского проекта изменен на «Принято» в разделе «Подключенные проекты».

23. Этапы очистки

Этапы очистки сети производителей

Примечание. В следующем разделе выполните обновления конфигурации в проекте, содержащем вашу службу Producer.

Удаление компонентов лаборатории из единой облачной оболочки в терминале проекта Producer.

gcloud compute routers nats delete cloudnatprod --router=crnatprod --region=us-west2 --quiet

gcloud compute routers delete crnatprod --region=us-west2 --quiet

gcloud compute instances delete www-01 --zone=us-west2-a --quiet

gcloud compute instances delete www-02 --zone=us-west2-a --quiet

gcloud compute service-attachments delete vpc-demo-psc-west2-tcp --region=us-west2 --quiet

gcloud compute forwarding-rules delete vpc-demo-www-ilb-tcp --region=us-west2 --quiet

gcloud compute backend-services delete vpc-demo-www-be-tcp --region=us-west2 --quiet

gcloud compute instance-groups unmanaged delete vpc-demo-ig-www --zone=us-west2-a --quiet

gcloud compute health-checks delete hc-http-80 --quiet

gcloud compute firewall-rules delete vpc-demo-allowpsc-tcp --quiet

gcloud compute firewall-rules delete vpc-demo-health-checks --quiet

gcloud compute firewall-rules delete psclab-iap-prod --quiet

gcloud compute networks subnets delete vpc-demo-us-west2 --region=us-west2 --quiet

gcloud compute networks subnets delete vpc-demo-us-west2-psc-tcp --region=us-west2 --quiet

gcloud compute networks delete vpc-demo-producer --quiet

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

Этапы очистки потребительской сети

Удаление компонентов лаборатории из единой облачной оболочки в терминале проекта Producer.

gcloud compute routers nats delete cloudnatconsumer --router=crnatconsumer --region=us-west2 --quiet

gcloud compute routers delete crnatconsumer --region=us-west2 --quiet

gcloud compute instances delete test-instance-1 --zone=us-west2-a --quiet

gcloud compute forwarding-rules delete vpc-consumer-psc-fr-tcp --region=us-west2 --quiet

gcloud compute addresses delete vpc-consumer-psc-tcp --region=us-west2 --quiet

gcloud compute firewall-rules delete psclab-iap-consumer --quiet

gcloud compute networks subnets delete consumer-subnet --region=us-west2 --quiet

gcloud compute firewall-rules delete vpc-consumer-psc --quiet

gcloud compute networks delete vpc-demo-consumer --quiet

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

Поздравляем с завершением работы над кодом.

Что мы рассмотрели

  • Преимущества подключения к частным услугам
  • Ключевые понятия для потребителей услуг
  • Ключевые концепции для производителей услуг
  • Создайте производственную среду
  • Предоставлять службу (среду производителя) через вложение службы.
  • Создайте потребительскую среду
  • Создайте правило переадресации в потребительской сети.
  • Проверка доступа потребителя TCP
  • Включить и проверить протокол прокси
  • Включить контроль доступа политикой