GCP Compute Instance NI C в случайном режиме - PullRequest
1 голос
/ 05 января 2020

Я добавил сеть macvlan docker в свой экземпляр Ubuntu в GCP. Однако я не могу получить доступ к / от экземпляра. Я подумал, что, может быть, есть ограничение, которое навязывает ровно одну MA C на экземпляр.

Кто-нибудь знает об этом или есть обходной путь? Есть ли способ увидеть, как выглядит таблица arp / ma c на стороне шлюза в GCP?

Я намеревался использовать сеть Macvlan для docker, который использует дополнительный IP-адрес из Первичная сеть экземпляра.

Подробнее: я назначил дополнительный диапазон IP-адресов для экземпляра виртуальной машины. например, внутренний IP-адрес виртуальной машины (первичный): 10.10.10.2/24, диапазон вторичных IP-адресов виртуальной машины: 10.10.11.0/24

GCP направляет вторичный диапазон виртуальной машины к IP-адресу виртуальной машины. Я проверил это, создав тестовую петлю с IP 10.10.11.2 и получив доступ к этому IP с другой виртуальной машины в том же VP C. Это сработало.

На следующем шаге я удалил эту фиктивную петлю и установил автономный контейнер docker, используя сеть Macvlan с IP-адресом 10.10.11.2.

Я ожидал, что новый контейнер, подключенный к этой сети macvlan, будет доступен через интерфейс виртуальной машины ens4 с MA C и IP-адресом контейнера (10.10.11.2).

Согласно документация это то, что делает сеть Macvlan. Он полностью изолирует сеть Macvlan от сети хоста, используя новый адрес MA C для каждого контейнера в сети Macvlan.

Единственное отличие между IP-адресом от вторичного диапазона на виртуальной машине хоста и в контейнере Docket, находящемся в сети Macvlan, заключается в том, что контейнер использует MA C, отличную от виртуальной машины хоста.

1 Ответ

1 голос
/ 06 января 2020

Решение будет зависеть от того, какую функциональность вы пытаетесь достичь.

1 - если вам требуются два отдельно доступных IP-адреса на одной виртуальной машине, вам потребуется заново создать виртуальную машину с двумя виртуальными сетевыми сетями (интерфейс виртуальной сети). Добавление дополнительного vNI C может быть сделано только при создании виртуальной машины, а второй vNI C также должен быть на другом VP C.

2 - если вы хотите назначьте IP (как вторичный диапазон su bnet в одном VP C) для контейнера и сделайте так, чтобы traffi c был маршрутизируемым в этот контейнер и из него, тогда это очень похоже на Kubernetes IP Маскировка . Хотя маскирование IP-адресов обычно используется в Google Kubernetes Engine ( GKE ), ip-masq-agent может выполнять ту же задачу для контейнеров вашей виртуальной машины. Маскарад IP, по сути, приводит к тому, что исходный IP-адрес контейнера становится «источником-NAT» в vNI C виртуальной машины GCP. Это означает, что все трафики c, маршрутизируемые из ваших контейнеров в сети GCP, будут иметь ваши виртуальные машины GCP vNI C IP в качестве исходного IP.

Для варианта 2 требуется маскировка, поскольку по умолчанию виртуальная машина не может переслать пакет, созданный другой виртуальной машиной. В качестве первого шага при создании виртуальной машины IP-пересылка должна быть включена на vNI C (может быть включена только при создании виртуальной машины). Затем, чтобы включить маскировку IP для своих контейнеров, выполните шаги 7 и 8 из , настроив ВМ в качестве шлюза NAT .

...