通常,对Azure工作人员的访问是通过服务定义中定义的端点完成的。这些端点必须是TCP或HTTP(S),通过负载均衡器传递,然后连接到Azure计算机的实际IP /端口。
我的应用程序将从UDP的使用中受益匪浅,因为我从蜂窝设备连接,其中字节计数用于计费,而SYN / ACK / FIN的开销使我发送的8字节数据包相形见绌。我甚至考虑将我的数据直接放入ICMP消息头。但是,负载均衡器不支持这一点。
我知道您可以在Azure虚拟机上启用ping,然后ping它们 - http://weblogs.thinktecture.com/cweyer/2010/12/enabling-ping-aka-icmp-on-windows-azure-roles.html。
是否存在阻止我使用基于TCP的服务(通过负载均衡器公开)的任何内容,该服务只是分发Azure VM地址的IP地址和端口,然后让应用程序直接与该工作者通信? (我必须自己处理负载平衡。)如果工作人员关闭或移动,我的应用程序将足够聪明,可以重新连接到TCP端点并请求新的位置来发送数据。
这个概念是否有效,或者是否有适当的措施来阻止这种直接访问?
答案 0 :(得分:3)
您必须运行自己的路由器,该路由器公开输入(外部)端点,然后路由到服务的内部端点,可以是同一个角色,也可以是另一个角色(这实际上是远程桌面的工作方式)。您无法通过选择直接连接到特定实例。
BenjaminGuinebertière有一个由两部分组成的博客系列,描述了IIS应用程序请求路由以提供粘性会话(part 1,part 2)。这可能是一个很好的起点。
Ryan Dunn还谈到了Cloud Cover Show上的http会话路由,以及后续的blog post。
我意识到这两个例子并不完全是你正在做的事情,因为他们正在路由http,但他们有着相似的前提。
答案 1 :(得分:1)
有一个名为InstanceInputEndpoint的东西,您可以使用它来定义公共IP上的端口,这些端口将定向到特定VM实例上的本地端口。因此,您将拥有一个特定的端口+ IP组合,可以直接访问特定的VM。
<InstanceInputEndpoint name="HttpInstanceEndpoint" protocol="tcp" localPort="80">
<AllocatePublicPortFrom>
<FixedPortRange max="8089" min="8081" />
</AllocatePublicPortFrom>
</InstanceInputEndpoint>
更多信息: http://msdn.microsoft.com/en-us/library/windowsazure/gg557552.aspx