看起来我们根本无法使用Azure App Service(也就是Web Apps)。
这是我尝试过的。
的 1.天真的方法 - 作为WebJob的领事 强>
由于网络限制尝试连接到任何localhost端口,未生成与属于App Service(Web App)本身的进程的内容将最终出现以下异常。
尝试以其禁止的方式访问套接字 访问权限127.0.0.1:8500。
文件参考:
https://github.com/projectkudu/kudu/wiki/Azure-Web-App-sandbox#networking-restrictionsconsiderations
通过互联网访问应用程序的唯一方法是 通过已经公开的HTTP(80)和HTTPS(443)TCP端口; 应用程序可能无法在其他端口上侦听来自的数据包 互联网。但是,应用程序可以创建一个可以的套接字 从沙箱中侦听连接。例如,两个 同一app中的进程可以通过TCP相互通信 插座;连接尝试从沙箱外部传入,尽管如此 他们在同一台机器上,会失败。请参阅下一主题 更多细节。
这是一个有趣的部分:
连接尝试本地地址(例如localhost,127.0.0.1)和 机器自己的IP将失败, 除非另一个过程相同 sandbox在目标端口上创建了一个侦听套接字 。
的 2.领事从App Service本身产生 强>
我复制了 consul 到Web App(作为构建输出)并将以下行添加到应用程序启动代码:
consul
var consul = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "bin/consul/consul.exe"); Process.Start(consul, "agent --data-dir=../../data"); Process.Start(consul, "join my-cluster-dns.name");
......它加入了集群 和 我甚至能够通过领事连接到领事馆 127.0.0.1:8500 来自App Service(Web App)本身。
127.0.0.1:8500
然而,它仍然是无用的设置,因为必须可以从服务器访问Consul代理,所以我从群集的角度看到的是一个失败的“serf”健康检查的死节点。同样,根据文档,没有解决这个问题:“通过互联网访问应用程序的唯一方法是通过已经公开的HTTP(80)和HTTPS(443)TCP端口”。
https://www.consul.io/docs/agent/basics.html
并非群集中的所有Consul代理都必须使用相同的端口,但此地址必须 所有其他节点都可以访问。
的 摘要 强>
总而言之,可能无法通过Azure App Services正确托管/使用Consul。