Входящий пул 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.