Бессерверный соединитель VPC Google не обращается к экземпляру GCE с несколькими сетевыми интерфейсами
Можно ли каким-либо образом подключить облачные функции с помощью коннектора VPC в сети по умолчанию к экземпляру GCE с несколькими сетевыми интерфейсами, где nic0 - это другая сеть, а nic1 - сеть по умолчанию?
Итак, у меня есть экземпляр GCE с несколькими сетевыми интерфейсами.
nic0 is someother network
nic1 is default network
Я сделал бессерверный соединитель VPC в сети по умолчанию. И использовал этот соединитель с функциями Google Cloud для подключения к экземпляру GCE.
Проблема в том, что когда сетевые интерфейсы меняются местами, то есть nic0 - это сеть по умолчанию, а nic1 - это какая- то другая сеть, тогда соединитель VPC успешно подключается, и облачные функции могут достигать GCE, но когда nic0 - это какая-то другая сеть, а nic1 - сеть по умолчанию, тогда облачные функции не могут достичь GCE.
Я пробовал следующее:
- Я попытался поменять местами сетевые интерфейсы, т.е. по умолчанию на nic0, и он работает, но мне нужен nic0, чтобы какая-то другая сеть могла подключиться к другому внешнему серверу, поэтому по умолчанию используется nic1.
- Я попытался создать правила брандмауэра, но, по-видимому, они не нужны в этом сценарии, так как у меня уже есть необходимые правила.
- Я попытался сделать разъем VPC в другой сети, чтобы он мог подключаться к nic0, но это тоже не работает. Разъем VPC должен быть в сети по умолчанию.
Примечание. У меня есть правильная настройка разрешений IAM, поскольку я успешно подключил облачные функции к экземпляру GCE только с сетью по умолчанию.
1 ответ
Без дополнительной настройки вторичные сетевые интерфейсы предоставляют доступ только к той подсети, к которой они подключены, в том числе бессерверным соединителям VPC, поскольку по своей природе они представляют собой подсеть, отличную от той, к которой подключен ваш экземпляр.
Чтобы обойти это, вам нужно создать статический маршрут в операционной системе в экземпляре, где расположен вторичный интерфейс. Это, очевидно, будет зависеть от вашей операционной системы, но в Debian-9 вы можете настроить это с помощью этой команды:
sudo ip route add [MY_CONNECTOR_SUBNET] via [ETH1_DEFAULT_ROUTER] dev eth1
Где ETH1_DEFAULT_ROUTER - это адрес.1 вашей подсети ETH1, а MY_CONNECTOR_SUBNET - это подсеть формата CIDR /28, для использования которого настроен соединитель (например, что-то вроде 10.50.1.0/28, но это будет зависеть от того, как вы настроили свой соединитель).
Конечно, это не сохраняется при загрузке, так как это тоже конфигурация, зависящая от ОС, но это должно дать вам представление о том, является ли это проблемой для вас.
Кроме того, в сети по умолчанию нет ничего особенного - это просто автоматически созданная сеть с автоматическим режимом, и нет никаких причин, по которым это не должно было работать, когда у вас был соединитель, подключенный к nic0. "чужая" сеть. Единственное, что здесь происходит "особенным", - это то, что nic0 получает маршрут по умолчанию для всего трафика из виртуальной машины, и поэтому не нужно добавлять статический маршрут для доступа к бессерверному соединителю VPC в той же сети.