2016-07-14 4 views
1

Ich habe versucht, einen ILB für einen Cloud-Service zu erstellen, der eine Web-Rolle und eine Worker-Rolle (mit mindestens zwei Instanzen) enthält, und ich stecke fest. This is the scenario I'm in.Wie erstelle ich einen internen Lastenausgleich in Azure für einen Cloud-Dienst (klassisch)?

Die Sache ist, dass ich nicht will Powershell verwenden, weil es nicht meinen Fall paßt und die Forschung für ein funktionierendes Beispiel für eine Service-Definition und ServiceConfiguration-Datei für das Cloud-Projekt führte mich nirgends.

So, wie pro mehrere Quellen, die im Grunde die gleiche Sache angeben (official documentation, werde ich andere Links in den Kommentaren hinzufügen, da ich die Kappe erreicht habe) ich mit den folgenden Konfigurationsdateien endete:

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> 

(Das virtuelle Netzwerk und subn Sie sind bereits in Azure bereitgestellt)

Wenn ich nun versuche, die Lösung lokal auszuführen, wird der Azure-Emulator mit dem folgenden Fehler beendet: ".cscfg und .csdef stimmen nicht überein". Auch die Bereitstellung in Azure schlägt fehl.

Kann mir bitte jemand helfen und mir sagen, was ich falsch mache?

+0

(Sobald ich mehrere Links zum ursprünglichen Beitrag hinzufügen kann, werde ich das entfernen) [Dokumentation auf GitHub] (https://github.com/Azure/azure-content/blob/master/articles/load-balancer/ load-balancer-get-started-ilb-classic-cloud.md), [Blogbeitrag für neues SDK] (https://azure.microsoft.com/en-us/blog/announcing-release-of-visual-studio -2013-update-3-and-azure-sdk-2-4 /) (gehen Sie zu Cloud Services: Neue Netzwerkfähigkeiten im Abschnitt Service Model), [cscfg schema] (https://msdn.microsoft.com/en -us/library/azure/ee758710.aspx), [csdef-schema] (https://msdn.microsoft.com/en-us/library/azure/ee758711.aspx) –

Antwort

0

Ok, also endlich ein Glückspause! In der offiziellen Dokumentation besteht eine leichte Verwechslung zwischen dem Bereitstellungsmodell von VMs und klassischen Cloud-Diensten. Was für jeden getan werden muss, ist unterschiedlich.

Also im Fall von Cloud-Services, hat diese wunderbare example project den Trick.

Es gibt zwei Haupt Dinge, die man tun muss:

  1. Bereitstellung ein virtuelles Netzwerk mit Subnetzen (Sie haben eine Dokumentationsseite als eine verknüpfte Ressource in den oberen Link - Abschnitt Voraussetzungen). Damit endete ein Powershell-Skript auf, das im Grunde überprüft, ob die vnet vorhanden ist, und wenn es nicht verwendet nur das folgende Cmdlet:

    Set-AzureVNetConfig -ConfigurationPath [path_to_your_vnet_xml_config_file] 
    
  2. der Tat die .cscfg und .csdef müssen die umfangreichere Änderungen im Beispielprojekt beschrieben.Als Anmerkung werden die Eingangsendpunkte, die mit einem ILB definiert und verbunden sind, nur für den ILB sichtbar, so dass sie nicht der Außenwelt ausgesetzt sind.

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> 

auch als wichtiger Hinweis, wenn die Lösung lokal in dem Emulator ausgeführt wird, sollten Sie eine ServiceDefinition erstellen .Local.csdef mit xdt-Transformationen, die die Eingabeendpunkte entfernen. Dies beseitigt den Fehler, dass die Dateien .cscfg und .csdef nicht übereinstimmen.

Dies war ziemlich schmerzhaft, um es richtig für meinen spezifischen, aber nicht ungewöhnlichen Fall zu bekommen.

0

Ich habe heute den gleichen Fehler festgestellt. Die Fehlermeldung, die Sie wahrscheinlich auch Gesicht enthält: 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'

die subnet und staticVirtualNetworkIPAddress Felder in der .csdef Datei so weit den Trick Entfernen wie der Upload betroffen ist.

Get-AzureService | Get-AzureInternalLoadBalancer ausführen, wird die folgende

InternalLoadBalancerName : TestLoadBalancer 
ServiceName    : Test 
DeploymentName   : {GUID} 
SubnetName    : 
IPAddress    : 100.120.xx.xxx 
OperationDescription  : Get-AzureInternalLoadBalancer 
OperationId    : {GUID} 
OperationStatus   : Succeeded 

Der Cloud Service zeigt zwei IPs im Public IP adresses jetzt Abschnitt. Einer ist ein interner im Bereich 100.64.0.0/10. Seltsamerweise liegt dies nicht im angegebenen ILB-IP-Bereich (192.168.0.0/16).

+0

Das Entfernen der beiden Attribute hat die Azure-Bereitstellung tatsächlich ermöglicht , aber die Bereitstellung des lokalen Emulators schlägt immer noch mit demselben Fehler fehl. Leider sehe ich keine erstellten ILB im neuen oder alten Portal, auch nicht, wenn ich mit Powershell versuche: 'Get-AzureInternalLoadBalancer' oder' Get-AzureRmLoadBalancer'. Wie genau wurde deine Vorsorge getroffen? Vielen Dank! –

+0

Das ist seltsam. Ich sehe einen Load Balancer, der 'Get-AzureInternalLoadBalancer' mit diesem Dienst verwendet. Ich werde meinen Beitrag entsprechend aktualisieren. –

+0

Ok das ist wirklich merkwürdig. Abgesehen von der Bereitstellung des Cloud-Service für Azure mussten Sie noch etwas konfigurieren oder bereitstellen? Entweder über das Webportal oder über Powershell-Skripte? Von allem, was ich bisher gefunden habe, deutet nichts darauf hin, dass etwas anderes als das Schreiben der Konfigurationselemente notwendig ist. –

Verwandte Themen