2016-07-14 2 views
1

J'ai essayé de créer un ILB pour un service cloud contenant un rôle Web et un rôle Worker (avec au moins 2 instances de chaque) et je suis bloqué. This is the scenario I'm in.Comment créer un équilibreur de charge interne dans Azure pour un service cloud (classique)?

La chose est que je ne veux pas utiliser powershell parce qu'il ne correspond pas à mon cas et la recherche pour un exemple de travail d'une définition de service et le fichier ServiceConfiguration pour le projet de nuage m'a conduit nulle part.

Ainsi, selon plusieurs sources qui indiquent essentiellement la même chose (official documentation, je vais ajouter d'autres liens dans les commentaires depuis que je suis atteint le plafond) J'ai fini avec les fichiers de configuration suivants:

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> 

(Le réseau virtuel et subn et sont déjà configurés dans Azure)

Maintenant, lorsque j'essaie d'exécuter la solution localement, l'émulateur Azur s'arrête avec l'erreur suivante: ".cscfg et .csdef ne correspondent pas". Le déploiement sur Azure échoue également.

Quelqu'un peut-il m'aider et me dire ce que je fais mal s'il vous plaît?

+0

(une fois que je peux ajouter plusieurs liens à l'article d'origine, je vais supprimer cela) [documentation sur github] (https://github.com/Azure/azure-content/blob/master/articles/load-balancer/ load-balancer-get-started-ilb-classic-cloud.md), [article de blog pour le nouveau SDK] (https://azure.microsoft.com/en-us/blog/announcing-release-of-visual-studio -2013-update-3-et-azure-sdk-2-4 /) (allez dans Services Cloud: Nouvelles fonctionnalités de mise en réseau dans la section Modèle de service), [schéma cscfg] (https://msdn.microsoft.com/fr -us/library/azure/ee758710.aspx), [schéma csdef] (https://msdn.microsoft.com/fr-fr/library/azure/ee758711.aspx) –

Répondre

0

Ok, enfin une chance chanceuse! Il existe une légère confusion entre le modèle de déploiement des machines virtuelles et les services cloud classiques dans la documentation officielle. Ce qui doit être fait pour chacun diffère. Donc, dans le cas des services de cloud, ce merveilleux example project a fait l'affaire.

Il y a deux choses principales dont on a besoin de faire:

  1. Mise à disposition d'un réseau virtuel avec des sous-réseaux (vous avez une page de documentation en tant que ressource liée dans le lien ci-dessus - section Conditions préalables). Cela a fini par un script Powershell qui vérifie essentiellement si le vnet existe, et sinon il utilise simplement l'applet de commande suivante:

    Set-AzureVNetConfig -ConfigurationPath [path_to_your_vnet_xml_config_file] 
    
  2. En effet, le .cscfg et .csdef besoin des changements plus importants décrits dans l'exemple de projet.Comme une note, les points d'extrémité d'entrée définis et connectés à un ILB deviendront seulement visibles à l'ILB, ainsi ils ne sont pas exposés au monde extérieur.

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> 

également comme une note importante lors de l'exécution locale de la solution dans l'émulateur, assurez-vous de créer un ServiceDefinition .Local.csdef avec les transformations xdt qui suppriment les points de terminaison d'entrée. Cela supprime l'erreur indiquant que les fichiers .cscfg et .csdef ne correspondent pas.

Cela a été assez pénible de l'avoir pour mon cas spécifique, mais pas rare.

0

J'ai rencontré la même erreur aujourd'hui. Le message d'erreur que vous faites face probablement contient aussi: 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'

Suppression des champs subnet et staticVirtualNetworkIPAddress dans le fichier .csdef a fait l'affaire pour autant que le téléchargement est concerné.

exécution Get-AzureService | Get-AzureInternalLoadBalancer renvoie le

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

Le Service Cloud affiche deux adresses IP dans la section Public IP adresses maintenant. L'un est interne dans la gamme 100.64.0.0/10. Bizarrement, ce n'est pas dans la plage IP ILB (192.168.0.0/16) que j'ai spécifiée.

+0

En effet, la suppression des deux attributs a rendu possible le déploiement d'Azure , mais le déploiement de l'émulateur local échoue toujours avec la même erreur. Malheureusement, je ne vois aucun ILB créé dans le nouveau ou l'ancien portail, même lorsque j'essaie avec powershell: 'Get-AzureInternalLoadBalancer' ou' Get-AzureRmLoadBalancer'. Comment exactement le vôtre a-t-il été provisionné? Merci! –

+0

C'est étrange. Je vois un équilibreur de charge utilisant 'Get-AzureInternalLoadBalancer' avec ce service. Je mettrai à jour mon message en conséquence. –

+0

Ok, c'est vraiment bizarre. En dehors du déploiement du service cloud vers Azure, avez-vous dû configurer ou provisionner autre chose? Soit à partir du portail Web ou à travers des scripts PowerShell? De tout ce que j'ai trouvé jusqu'ici, rien n'indique que rien d'autre que d'écrire les éléments de configuration est nécessaire. –