1. Введение
Private Service Connect позволяет производителю услуг предлагать услуги потребителю услуг в частном порядке. Private Service Connect предлагает следующие преимущества:
- Сеть VPC производителя услуг может поддерживать более одного потребителя услуг.
- Каждый потребитель подключается к внутреннему IP-адресу, который он определяет. Private Service Connect выполняет преобразование сетевых адресов (NAT) для маршрутизации запроса производителю службы.
Рисунок 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 и связанные с ней правила брандмауэра разрешают связь с приложением-производителем.
Самостоятельная настройка среды
- Войдите в Cloud Console и создайте новый проект или повторно используйте существующий. Если у вас еще нет учетной записи Gmail или Google Workspace, вам необходимо ее создать .
Запомните идентификатор проекта — уникальное имя для всех проектов Google Cloud (имя, указанное выше, уже занято и не подойдет вам, извините!). Позже в этой лаборатории он будет называться PROJECT_ID
.
- Далее вам необходимо включить биллинг в Cloud Console, чтобы использовать ресурсы Google Cloud.
Прохождение этой лаборатории кода не должно стоить много, если вообще стоит. Обязательно следуйте всем инструкциям в разделе «Очистка», в которых рассказывается, как отключить ресурсы, чтобы вам не приходилось нести расходы, выходящие за рамки этого руководства. Новые пользователи Google Cloud имеют право на участие в программе бесплатной пробной версии стоимостью 300 долларов США .
Запустить Cloud Shell
Хотя Google Cloud можно управлять удаленно с вашего ноутбука, в этой лаборатории вы будете использовать Google Cloud Shell , среду командной строки, работающую в облаке.
В консоли GCP щелкните значок Cloud Shell на верхней правой панели инструментов:
Подготовка и подключение к среде займет всего несколько минут. Когда все будет готово, вы должны увидеть что-то вроде этого:
Эта виртуальная машина оснащена всеми необходимыми инструментами разработки. Он предлагает постоянный домашний каталог объемом 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 для каждого экземпляра.
Из «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-адресом.
- В Cloud Console выберите «Определить ведение журнала операций» → «Проводник журналов».
- В поле «Запрос» обновите запись ниже, указав свой потребительский проект, и выберите «Выполнить запрос».
logName:(projects/yourconsumerproject/logs/compute.googleapis.com%2Ffirewall) И jsonPayload.rule_details.reference:("network:vpc-demo-consumer/firewall:vpc-consumer-psc")
- Результаты запроса предоставляют следующее для каждого предоставленного снимка экрана
- Разверните журнал и определите выходные данные, представленные ниже. Обратите внимание на dest_ip: 10.0.60.100 — это СТАТИЧЕСКИЙ TCP-IP, а src_ip: 10.0.60.2 — это IP-адрес экземпляра виртуальной машины.
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, выполнив следующие действия:
- В Cloud Console выберите «Определить ведение журнала операций» → «Проводник журналов».
- В поле «Запрос» обновите запись ниже, указав свой prodproject, и выберите «Выполнить запрос».
logName:(projects/yourprodproject/logs/compute.googleapis.com%2Ffirewall) И jsonPayload.rule_details.reference:("network:vpc-demo-producer/firewall:vpc-demo-allowpsc-tcp")
- Результаты запроса предоставляют следующее для каждого предоставленного снимка экрана
- Разверните журнал и найдите выходные данные, представленные ниже. Обратите внимание на TCP ILB dest_ip: 10.0.2.10 и NAT TCP source_range (192.168.0.0/24) и соответствующий src_ip: 192.168.0.2.
21. Включить прокси-протокол.
По умолчанию Private Service Connect преобразует исходный IP-адрес потребителя в адрес в одной из подсетей Private Service Connect в сети VPC поставщика услуг. Если вместо этого вы хотите видеть исходный IP-адрес источника потребителя, вы можете включить протокол PROXY. Если протокол PROXY включен, вы можете получить IP-адрес источника потребителя и идентификатор соединения PSC из заголовка протокола PROXY.
Удаление опубликованных служб производителей
Примечание. В следующем разделе выполните обновления конфигурации в проекте, содержащем вашу службу 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» и запустите по одному сеансу для каждого экземпляра.
Из «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 | ||
Подпись протокола ПРОКСИ | | ||
Версия, протокол, длина | | ||
Исходный IP-адрес | | | |
Dst IP | | | |
Исходный порт | | | |
Dst-порт | | | |
Тип TLV (PP2_TYPE_GCP) | | ||
Длина TLV | | ||
pscConnectionId | | |
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» → «Подключенные проекты».
Обратите внимание: статус потребительского проекта в разделе «Подключенные проекты» изменен на «Ожидание».
Примите потребительский проект, выполнив следующую команду в облачной оболочке. Обязательно укажите соответствующее имя проекта.
gcloud compute service-attachments update vpc-demo-psc-west2-tcp --region=us-west2 --consumer-accept-list $consumerproject=20
Определите статус конечной точки, перейдя в «Сетевые службы» → «Подключение частных служб» → «Опубликованные службы» → «vpc-demo-psc-west2-tcp» → «Подключенные проекты».
Обратите внимание: статус потребительского проекта изменен на «Принято» в разделе «Подключенные проекты».
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
- Включить и проверить протокол прокси
- Включить контроль доступа политикой