Входящий пул NAT, как обнаружить внешний порт?

Предыстория: Если я правильно понимаю, InboundNATPools используются для сопоставления диапазона внешних портов каждый с определенной виртуальной машиной на VMSS позади LB. например {LB_IP:p1,LB_IP:p2, ...} => {VM1:p0,VM2:p0, ...}

Вопрос: Как виртуальная машина (то есть приложение) может обнаружить назначенный ей внешний порт? например, в приведенном выше примере правый порт из {p1,p2,..}

Возможный подход: я рассматриваю возможность использования внешнего сервиса, который будет прослушивать соединения на хорошо известном порту, а когда соединение будет установлено, ответит исходным портом. Я неохотно им пользуюсь, поскольку это означает поддержку другого сервиса.

Дополнительные сведения: я работаю в Service Fabric, и протокол для порта - TCP.

Идентичный вопрос без ответа. Извлечь NAT-порт балансировщика нагрузки Azure для виртуальной машины Azure в C# не удалось получить правильный ответ, я надеюсь снова решить эту проблему.

1 ответ

Предполагая, что ваши ID шкалы смежны, вы можете использовать

curl -H Metadata:true "http://169.254.169.254/metadata/instance?api-version=2017-12-01"

который даст вам имя в формате nodename_0

добавление числа после _ к начальному порту балансировщика нагрузки должно дать вам порт

Это очень забавно, и я действительно надеюсь, что есть лучшее решение!

Лично я предпочел предоставить VPN-доступ, чтобы к этим портам можно было обращаться напрямую из внутренней сети VNET.

Другие вопросы по тегам