Облачные функции Google с VP C. Выход без соединения с сервером. Облачный NAT не работает. - PullRequest
0 голосов
/ 28 марта 2020

Это относится к следующим вопросам, которые устарели

В настоящее время GCP имеет VP C Безсерверный соединитель, который позволяет вам направлять весь трафик c через VP C Соединитель и настройка Cloud NAT для получения IP-адресов c.

Я следовал следующему руководству https://cloud.google.com/functions/docs/networking/network-settings#associate -stati c -ip , используя регион us-east4 но внешние запросы от моей облачной функции всегда прерывались.

Я не уверен, что это ошибка, или я что-то пропустил.

Редактировать: чтобы убедиться, что я выполнил все, я проделал все шаги, используя gcloud, команда, где это возможно. Эти команды скопированы из руководств из GCP.

  1. Установка идентификатора проекта для будущего использования
PROJECT_ID=my-test-gcf-vpc-nat

Go для консоли и включения биллинга

Настройка VP C и тестовой виртуальной машины для тестирования Cloud NAT

gcloud services enable compute.googleapis.com \
  --project $PROJECT_ID

gcloud compute networks create custom-network1 \
  --subnet-mode custom \
  --project $PROJECT_ID

gcloud compute networks subnets create subnet-us-east-192 \
  --network custom-network1 \
  --region us-east4 \
  --range 192.168.1.0/24 \
  --project $PROJECT_ID

gcloud compute instances create nat-test-1 \
  --image-family debian-9 \
  --image-project debian-cloud \
  --network custom-network1 \
  --subnet subnet-us-east-192 \
  --zone us-east4-c \
  --no-address \
  --project $PROJECT_ID

gcloud compute firewall-rules create allow-ssh \
  --network custom-network1 \
  --source-ranges 35.235.240.0/20 \
  --allow tcp:22 \
  --project $PROJECT_ID

Созданные разрешения IAP S SH с использованием консоли

Проверка конфигурации сети, у виртуальной машины не должно быть доступа inte rnet без Cloud NAT

gcloud compute ssh nat-test-1 \
  --zone us-east4-c \
  --command "curl -s ifconfig.io" \
  --tunnel-through-iap \
  --project $PROJECT_ID

команда ответила connection timed out

Настройка Cloud NAT
gcloud compute routers create nat-router \
  --network custom-network1 \
  --region us-east4 \
  --project $PROJECT_ID

gcloud compute routers nats create nat-config \
  --router-region us-east4 \
  --router nat-router \
  --nat-all-subnet-ip-ranges \
  --auto-allocate-nat-external-ips \
  --project $PROJECT_ID
Снова проверьте сетевую конфигурацию, виртуальная машина должна иметь доступ inte rnet с Cloud NAT
gcloud compute ssh nat-test-1 \
  --zone us-east4-c \
  --command "curl -s ifconfig.io" \
  --tunnel-through-iap \
  --project $PROJECT_ID

Команда ответила IP-адресом

Создан VP C Соединитель доступа
gcloud services enable vpcaccess.googleapis.com \
  --project $PROJECT_ID

gcloud compute networks vpc-access connectors create custom-network1-us-east4 \
  --network custom-network1 \
  --region us-east4 \
  --range 10.8.0.0/28 \
  --project $PROJECT_ID

gcloud compute networks vpc-access connectors describe custom-network1-us-east4 \
  --region us-east4 \
  --project $PROJECT_ID
Добавлены разрешения для учетной записи службы облачных функций Google
gcloud services enable cloudfunctions.googleapis.com \
  --project $PROJECT_ID

PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format="value(projectNumber)")

gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member=serviceAccount:service-$PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com \
  --role=roles/viewer

gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member=serviceAccount:service-$PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com \
  --role=roles/compute.networkUser
Есть предложения, я должен добавить дополнительные правила брандмауэра и разрешения учетной записи службы
# Additional Firewall Rules
gcloud compute firewall-rules create custom-network1-allow-http \
  --network custom-network1 \
  --source-ranges 0.0.0.0/0 \
  --allow tcp:80 \
  --project $PROJECT_ID

gcloud compute firewall-rules create custom-network1-allow-https \
  --network custom-network1 \
  --source-ranges 0.0.0.0/0 \
  --allow tcp:443 \
  --project $PROJECT_ID


# Additional Permission, actually this service account has an Editor role already.
gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member=serviceAccount:$PROJECT_ID@appspot.gserviceaccount.com \
  --role=roles/compute.networkUser
Развернутый тест Облачные функции

index. js

const publicIp = require('public-ip')

exports.testVPC = async (req, res) => {
  const v4 = await publicIp.v4()
  const v6 = await publicIp.v6()
  console.log('ip', [v4, v6])
  return res.end(JSON.stringify([v4, v6]))
}
exports.testNoVPC = exports.testVPC
# Cloud Function with VPC Connector
gcloud functions deploy testVPC \
  --runtime nodejs10 \
  --trigger-http \
  --vpc-connector custom-network1-us-east4 \
  --egress-settings all \
  --region us-east4 \
  --allow-unauthenticated \
  --project $PROJECT_ID

# Cloud Function without VPC Connector
gcloud functions deploy testNoVPC \
  --runtime nodejs10 \
  --trigger-http \
  --region us-east4 \
  --allow-unauthenticated \
  --project $PROJECT_ID

Облачная функция без VP C Соединитель ответил с IP-адресом https://us-east4-my-test-gcf-vpc-nat.cloudfunctions.net/testNoVPC

Облачная функция с VP C Тайм-аут разъема https://us-east4-my-test-gcf-vpc-nat.cloudfunctions.net/testVPC

Ответы [ 2 ]

2 голосов
/ 28 марта 2020
  1. Настройте пример настройки Cloud NAT с помощью Compute Engine . Используйте Compute Engine, чтобы проверить, были ли успешно выполнены ваши настройки для Cloud NAT.

  2. Конфигурирование Serverless VP C Access . Убедитесь, что вы создали соединитель VP C на custom-network1, выполненном на шаге 1.

  3. Создание облачной функции Google

a. Под сетью выберите соединитель, созданный на шаге 2, и Route all traffic through the VPC connector.


import requests
import json

from flask import escape

def hello_http(request):

    response = requests.get('https://stackoverflow.com')

    print(response.headers)    
    return 'Accessing stackoverflow from cloud function:  {}!'.format(response.headers)

Область для Cloud Nat, Vp c Функция соединителя и облака: us-central1

4. Проверьте функцию, чтобы узнать, есть ли у вас доступ к inte rnet:

Accessing stackoverflow from cloud function:  {'Cache-Control': 'private', 'Content-Type': 'text/html; charset=utf-8', 'Content-Encoding': 'gzip', 'X-Frame-Options': 'SAMEORIGIN', 'X-Request-Guid': 'edf3d1f8-7466-4161-8170-ae4d6e615d5c', 'Strict-Transport-Security': 'max-age=15552000', 'Feature-Policy': "microphone 'none'; speaker 'none'", 'Content-Security-Policy': "upgrade-insecure-requests; frame-ancestors 'self' https://stackexchange.com", 'Content-Length': '26391', 'Accept-Ranges': 'bytes', 'Date': 'Sat, 28 Mar 2020 19:03:17 GMT', 'Via': '1.1 varnish', 'Connection': 'keep-alive', 'X-Served-By': 'cache-mdw17354-MDW', 'X-Cache': 'MISS', 'X-Cache-Hits': '0', 'X-Timer': 'S1585422197.002185,VS0,VE37', 'Vary': 'Accept-Encoding,Fastly-SSL', 'X-DNS-Prefetch-Control': 'off', 'Set-Cookie': 'prov=78ecd1a5-54ea-ab1d-6d19-2cf5dc44a86b; domain=.stackoverflow.com; expires=Fri, 01-Jan-2055 00:00:00 GMT; path=/; HttpOnly'}!

Успех, теперь вы можете указать IP-адрес stati c для NAT

0 голосов
/ 29 марта 2020

Проверьте, были ли облачные маршрутизаторы nat созданы в том же виртуальном канале C, который использовался для Serverless VP C Access.

Также проверьте, развернута ли облачная функция в том же регионе облачных маршрутизаторов. используется Cloud Nat.

Спасибо, Эдуардо Руела

...