Несколько виртуальных машин на одной службе Azure Cloude с разными доменными именами?

Допустим, мне нужно развернуть более 200 виртуальных машин на Azure. Каждый виртуальный сервер имеет веб-сайт, и каждый из них должен иметь уникальный домен / IP-адрес.

Я могу развернуть каждый виртуальный сервер на отдельную службу cloude (и иметь разные ip), но ограничение на количество служб cloude на подписку составляет 200, поэтому в этом случае я ограничен 200 vm (веб-сайтами).

Но что, если я разверну несколько виртуальных машин в одной облачной службе (ограничение составляет 50 виртуальных машин на облачную службу). Таким образом, у меня может быть 50 виртуальных машин на один облачный сервис * 200 облачных сервисов на одну подписку!

Проблема в том, что виртуальные машины должны иметь разные домены / ip, и когда я развертываю несколько виртуальных машин в одной службе cloude, все виртуальные машины имеют одинаковый домен и ip.

  1. Как использовать разные домены / ip для нескольких виртуальных машин в одном сервисе cloude?

  2. Может ли это быть достигнуто с несколькими vip-серверами на облачный сервис? https://azure.microsoft.com/en-us/documentation/articles/load-balancer-multivip/

  3. Это может быть достигнуто с зарезервированными IP-адресами? https://azure.microsoft.com/en-us/blog/reserved-ip-addresses/

  4. Можно ли этого добиться с помощью новой модели Resource Manager?

Код, который я сейчас использую для развертывания нескольких виртуальных машин в одной облачной службе:

private async Task CreateVirtualMachine()
    {
        DeploymentGetResponse deploymentResponse = await _computeManagementClient.Deployments.GetBySlotAsync("myservicename", DeploymentSlot.Production);

        if (deploymentResponse == null)
        {
            var parameters = new VirtualMachineCreateDeploymentParameters
            {
                DeploymentSlot = DeploymentSlot.Production,
                Name = "mservicename",
                Label = "myservicename"
            };

            parameters.Roles.Add(new Role
            {
                OSVirtualHardDisk = new OSVirtualHardDisk
                {
                    HostCaching = VirtualHardDiskHostCaching.ReadWrite,
                    SourceImageName = "imagename"
                },

                RoleName = "vmname",
                RoleType = VirtualMachineRoleType.PersistentVMRole.ToString(),
                RoleSize = VirtualMachineRoleSize.Small,
                ProvisionGuestAgent = true
            });

            parameters.Roles[0].ConfigurationSets.Add(new ConfigurationSet
            {
                ComputerName = "vmname",
                ConfigurationSetType = ConfigurationSetTypes.LinuxProvisioningConfiguration,
                HostName = "vmname",
                AdminUserName = "adminusername",
                AdminPassword = "adminpass",
                UserName = "username",
                UserPassword = "userpass",
                DisableSshPasswordAuthentication = false,

            });

            parameters.Roles[0].ConfigurationSets.Add(new ConfigurationSet
            {
                ConfigurationSetType = ConfigurationSetTypes.NetworkConfiguration,
                InputEndpoints = new List<InputEndpoint>()
                {
                    new InputEndpoint()
                    {
                        Name = "HTTP",
                        Protocol = InputEndpointTransportProtocol.Tcp,
                        LocalPort =  80,
                        Port = 80
                    }
                }
            });

            var response = await _computeManagementClient.VirtualMachines.CreateDeploymentAsync("mservicename", parameters);

        }
        else
        {
            var createParameters = new VirtualMachineCreateParameters
            {
                OSVirtualHardDisk = new OSVirtualHardDisk
                {
                    HostCaching = VirtualHardDiskHostCaching.ReadWrite,
                    SourceImageName = "imagename"
                },

                RoleName = "vmname",
                RoleSize = VirtualMachineRoleSize.Small,
                ProvisionGuestAgent = true,

                ConfigurationSets = new List<ConfigurationSet>
            {
                new ConfigurationSet
                {

                    ComputerName = "vmname",
                    ConfigurationSetType = ConfigurationSetTypes.LinuxProvisioningConfiguration,
                    HostName = "vmname",
                    AdminUserName = "adminusername",
                    AdminPassword = "adminpass",
                    UserName = "username",
                    UserPassword = "userpass",
                    DisableSshPasswordAuthentication = false
                },
                new ConfigurationSet
                {
                    ConfigurationSetType = ConfigurationSetTypes.NetworkConfiguration,
                    InputEndpoints = new List<InputEndpoint>()
                    {
                        new InputEndpoint()
                        {
                            Name = "HTTP",
                            Protocol = InputEndpointTransportProtocol.Tcp,
                            LocalPort =  81,
                            Port = 81
                        }
                    }
                }
            }
            };

            var responseCreate = await _computeManagementClient.VirtualMachines.CreateAsync("mservicename", deploymentResponse.Name, createParameters);

        }
    }

1 ответ

Если вы хотите, чтобы каждая виртуальная машина имела собственный IP-адрес внутри облачной службы, вам нужно взглянуть на общедоступные IP-адреса уровня экземпляра: это отдельные IP-адреса, назначенные каждой виртуальной машине, а не облачной службе.

Однако я бы посоветовал вам также полностью отказаться от использования облачных сервисов и вместо этого использовать новый стек на основе Resource Manager. Если вы не знали, что все ресурсы Azure V2 отойдут от модели облачной службы, вместо этого используйте новый формат диспетчера ресурсов. Этот новый формат имеет некоторые существенные преимущества для того, что вы делаете:

  • Разделение наших сетевых интерфейсов и балансировщиков нагрузки на отдельные элементы, которые могут иметь отдельные публичные и частные IP-адреса
  • Декларативное создание на основе шаблонов ресурсов
  • Параллельное создание ресурсов, особенно важно, если вам нужно создать много виртуальных машин одновременно

Облачные службы все еще существуют, и об их удалении не было сделано никаких заявлений, но модель ARM, похоже, намного лучше соответствует тому, что вы пытаетесь сделать.

Другие вопросы по тегам