Не удается получить доступ к службе http с частного IP-адреса через соединитель VPC в облачной функции Google

#google-cloud-platform #google-cloud-functions #google-cloud-networking #google-vpc

#google-cloud-platform #google-cloud-функции #google-cloud-networking #google-vpc

Вопрос:

У меня есть служба, которая запускается в вычислительном экземпляре и может получить доступ с помощью частного IP-адреса, подобного этому (https://172.31.93.233/proxy.php). Я хочу сделать запрос https из облачной функции для доступа к этой службе, поэтому я создал соединитель (с диапазоном IP: 172.31.0.0 / 28) для VPC, который имеет диапазон IP: 172.30.0.0 / 16, и у соединителя есть настройки входа (разрешить весь трафик) и настройки выхода (направить весь трафик через соединитель VPC). НО почему-то моей функции не удалось выполнить запрос и указать это в журнале: «Выполнение функции заняло 60002 мс, завершено со статусом: ‘тайм-аут’ Оба VPC и функция находятся в одном регионе (us-central1)

Дополнительная информация: На самом деле основная служба https развернута на стороне AWS, и я использую VPN от сайта к сайту через AWS к GCP для доступа к этой службе с помощью GCP. Я могу подтвердить, что эта служба доступна в вычислительном экземпляре GCP под тем же VPC, который я подключил к VPN.

Я создал бессерверный соединитель через веб-консоль при создании функции. В IAM я вижу следующее разрешение с учетными записями служб:

1: Бессерверный агент службы доступа к VPC (администратор бессерверного доступа к VPC, бессерверный агент службы доступа к VPC)

2: Агент службы облачных функций Google (агент службы облачных функций, администратор бессерверного доступа к VPC)

3: Моя собственная учетная запись, из которой я использую функцию тестирования от GCP (редактор, владелец, администратор бессерверного доступа к VPC)

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

Вот мой пример кода функции:

 var http = require('https');
exports.helloWorld = (req, res) => {
  http
        .get('https://172.31.93.233/proxy.php?api=catalogos_direcciones', resp => {
            let data = ''
            resp.on('data', chunk => {
                data  = chunk
            })
            resp.on('end', () => {
                let peopleData = JSON.parse(data)
                console.log(peopleData);
                res.status(200).json(peopleData);
               
            })
        })
 
};
  

Комментарии:

1. Настроили ли вы правила брандмауэра для доступа к вычислительной виртуальной машине?

2. Извините, что вы имеете в виду для доступа к вычислительной виртуальной машине? Вы имеете в виду правило брандмауэра для облачной функции для доступа к этой службе?

3. Я имею в виду правила брандмауэра входа в вашу сеть VPC, чтобы ваша служба была доступна на назначенном порту.

4. Как я уже писал, эта служба доступна везде в VPC, поэтому нет необходимости добавлять для этого дополнительное правило брандмауэра.

5. Достаточно ли 1 минуты тайм-аута по умолчанию? Вы проверили в журналах, действительно ли запрос достигает виртуальной машины?