我在 Azure 中的 CentOS 虚拟机上运行 Tomcat。主机上没有防火墙。 wget localhost:8080 返回一个页面,就像对私有 IP 地址进行相同的请求一样。我可以使用公共 IP 地址通过 SSH 连接到服务器,但 wget public_IP_address:8080 不会路由到主机。
我已为端口 8080 启用入站安全规则,该规则看起来与允许通过端口 22 进行 SSH 的规则相同。
我已经研究这个好几个小时了。似乎所有有关在 Azure 中的 Linux 主机上运行 Tomcat 的文章都是使用经典虚拟机管理 UI 编写的。他们讨论了指定端点,这在现代 Azure UI 中不可用。我同样看到有关建立“ILPIP”的信息,但这似乎需要 powershell,而我的 CentOS 主机上没有。
我同样找不到任何有关修改上面文章中所示的所谓“VIP”的信息。
在 Azure 中的 CentOS 虚拟机上启用对监听端口 8080 的 Tomcat 服务器的 TCP 访问时,我缺少什么?
更新:
根据@MichaelB的建议,我在Mac OS X上安装了Azure命令行工具。
$ azure vm show minimalfalcon
info: Executing command vm show
+ Getting virtual machines
warn: No VMs found
info: vm show command OK
在当前门户 UI 中,单击“虚拟机(经典)”不会显示任何实例。当我单击“虚拟机”时,我就可以访问虚拟机的所有设置。我怀疑 Azure CLI 工具正在连接到经典 API,而不是当前门户使用的任何 API。而且该门户不提供对我的虚拟机的经典访问。
我另外遵循@MichaelB的建议,在安全组中禁用SSH的入站规则。果然,SSH 访问持续到该虚拟机!所以,当我导航时:
虚拟机>>minimalfalcon>>设置>>网络接口>>minimalfalcon447>>网络安全组(minimalfalcon)>>设置>>入站安全规则
这些并不能真正控制对我的虚拟机的访问。请参阅下面的屏幕截图。需要跳过什么环节才能将此网络安全组策略应用于我的虚拟机?我真的不明白这不应该如何应用。任何指导表示赞赏!
除非您需要创建端口转换,否则您应该能够仅使用门户公开该端口。 检查这个
如果您使用新的资源管理器(通过门户或通过 ARM 脚本)创建 VM,则端点的概念不再存在。相反,您有一个与 NIC 关联的 IP 地址。该 NIC 位于网络安全组 (NSG) 内。在 NSG 中,您定义入站和出站端口规则。再点击几下,但是...
首先查看虚拟机的设置并导航到网络接口:
然后导航到网络安全组:
最后编辑入站规则:
这对我有用。确保使用 VM 刀片的“Essentials”部分中列出的公共 IP 地址。
创建入站安全规则时,请确保:
注意:Azure 有两种不同的部署模型:资源管理器和经典。 ILPIP 仅与经典部署模型相关。
注意:从门户(在 ARM 模型中)创建 VM 时,它会自动关联到虚拟网络 (vnet)、vnet 中的特定子网和网络安全组。
2个想法:
1) 默认情况下,ARM 上的所有端口都是打开的(除非您有防火墙等)。这就是为什么你的 ssh 即使没有入站规则也能通过。如果要阻止对端口的访问,则必须明确执行此操作。因此,如果这是出于测试目的,您可以完全删除 NSG;这可以帮助确定问题是 NSG 还是其他问题。
2)你说你可以从虚拟机中 wget localhost:8080 并且它可以工作,对吗?这让我觉得也许你的 tomcat 正在监听 127.0.0.1 而不是你的公共 IP(或者为了简单起见,监听 0.0.0.0)。
希望这有帮助! :)