我一直试图围绕为包含Web角色和工作者角色的云服务创建ILB(每个至少有2个实例)并且我被卡住了。 This is the scenario I'm in.
问题是我不想使用PowerShell,因为它不适合我的情况,而对云项目的服务定义和ServiceConfiguration文件的工作示例的研究使我无处可去。
所以,根据几个基本上表示相同内容的来源(official documentation,我会在评论中添加其他链接,因为我已达到上限)我最终得到了以下配置文件:
ServiceDefinition.csdef中
<ServiceDefinition name="Test" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition" schemaVersion="2015-04.2.6">
<WebRole name="Web" vmsize="small">...</WebRole>
<WorkerRole name="Worker" vmsize="small">
...
<Endpoints>
<InputEndpoint name="lbEndpoint1" protocol="tcp" localPort="31010" port="31010" loadBalancer="TestILB" />
</Endpoints>
</WorkerRole>
</ServiceDefinition>
ServiceConfiguration.Cloud.cscfg
<ServiceConfiguration serviceName="Test" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceConfiguration" osFamily="4" osVersion="*" schemaVersion="2015-04.2.6">
<Role name="Web">...</Role>
<Role name="Worker">...</Role>
<NetworkConfiguration>
<LoadBalancers>
<LoadBalancer name="TestILB">
<FrontendIPConfiguration type="private" subnet="Test-ILB-Subnet-Backend" staticVirtualNetworkIPAddress="10.0.0.1" />
</LoadBalancer>
</LoadBalancers>
</NetworkConfiguration>
</ServiceConfiguration>
(虚拟网络和子网已在Azure中配置)
现在,当我尝试在本地运行解决方案时,azure仿真器会因以下错误而停止:&#34; .cscfg和.csdef不匹配&#34;。部署到Azure也失败了。
任何人都可以帮助我并告诉我,我做错了吗?
答案 0 :(得分:0)
我今天遇到了同样的错误。
您面临的错误消息可能还包含:If a deployment is not in a virtual network, any load balancer associated with this deployment cannot be in a virtual network. As the current deployment is not to a virtual network, please remove the subnet field for load balancer 'TestILB'
删除subnet
文件中的staticVirtualNetworkIPAddress
和.csdef
字段就上传而言起了作用。
执行Get-AzureService | Get-AzureInternalLoadBalancer
会返回以下内容
InternalLoadBalancerName : TestLoadBalancer
ServiceName : Test
DeploymentName : {GUID}
SubnetName :
IPAddress : 100.120.xx.xxx
OperationDescription : Get-AzureInternalLoadBalancer
OperationId : {GUID}
OperationStatus : Succeeded
Cloud Service现在在Public IP adresses
部分显示两个IP。一个是100.64.0.0/10范围内的内部。奇怪的是,这不在我指定的ILB IP范围(192.168.0.0/16)中。
答案 1 :(得分:0)
好的,最后幸运的是! 在官方文档中,VM的部署模型与传统云服务之间存在轻微的混淆。需要做的每件事都有所不同。
所以在云服务的情况下,这个精彩的example project就可以了。
有两件事需要做:
使用子网配置虚拟网络(您在上面的链接中有一个文档页面作为链接资源 - 前提条件部分)。这最终得到了一个powershell脚本,它基本上检查vnet是否存在,如果不存在,它只使用以下cmdlet:
Set-AzureVNetConfig -ConfigurationPath [path_to_your_vnet_xml_config_file]
ServiceConfiguration.Cloud.cscfg:
<NetworkConfiguration>
<!-- Doc: https://azure.microsoft.com/en-us/documentation/articles/virtual-networks-create-vnet-classic-netcfg-ps/ -->
<VirtualNetworkSite name="VNET_NAME" />
<AddressAssignments>
<InstanceAddress roleName="Web">
<Subnets>
<Subnet name="Frontend" />
</Subnets>
</InstanceAddress>
<InstanceAddress roleName="Worker">
<Subnets>
<Subnet name="Backend" />
</Subnets>
</InstanceAddress>
<ReservedIPs>
<ReservedIP name="RESERVED_IP" />
</ReservedIPs>
</AddressAssignments>
<!-- Doc: https://github.com/Azure-Samples/cloud-services-dotnet-internal-load-balancer -->
<LoadBalancers>
<LoadBalancer name="testilb">
<FrontendIPConfiguration type="private" subnet="Backend" />
</LoadBalancer>
</LoadBalancers>
</NetworkConfiguration>
ServiceDefinition.csdef中:
<Endpoints>
<!-- Doc: https://github.com/Azure-Samples/cloud-services-dotnet-internal-load-balancer -->
<InputEndpoint name="OdbcEndpoint" protocol="tcp" port="31010" localPort="31010" loadBalancer="testilb" />
<InputEndpoint name="HttpEndpoint" protocol="http" port="80" localPort="80" loadBalancer="testilb" />
</Endpoints>
同样作为在模拟器中本地运行解决方案时的重要注意事项,请务必使用xdt转换创建ServiceDefinition.Local.csdef,以删除输入端点。这消除了表明.cscfg和.csdef不匹配的错误。
对于我的具体但并非罕见的案例来说,这是非常痛苦的。