一个 Azure 云服务中具有不同 url 的多个虚拟机?

Multiple virtual machines with different url's in one azure cloud service?

我正在尝试在一个云服务中添加多个虚拟机。

目前,我可以在这个云服务中创建一个云服务和一个虚拟机。在此之后,我试图在同一个部署中将另一个虚拟机添加到同一个 sloud 服务,这个过程也成功了,但我不明白的是如何为这个新虚拟机设置不同的 url !?

因为现在第一个虚拟机的url是myservicename.cloudapp.net,第二个虚拟机也是一样!!他们有相同的IP。怎么会这样?当第二个虚拟机具有相同的 url 时如何访问它?

第一个虚拟机的端口是:80,第二个虚拟机的端口是 81。

问题:

  1. 如何访问个人虚拟机?

  2. 有没有办法让 url 像:myservicename.vmname.cloudapp.net? 所以第一台虚拟机 url 是:myservicename.vmname1.cloudapp.net,第二台机器的 url 是:myservicename.vmname2.cloudapp.net

代码:

私有异步任务 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);

    }
}

Azure 云服务 (yourdns.cloudapp.net) 具有 一个 DNS 名称和 一个 IP 地址。该云服务中的所有虚拟机都位于该单一 IP 地址后面。如果您设置了端点(例如端口 80),那么您可能会在所有 VM 之间对该端点进行负载平衡。或者...您可能有一个端口直接映射到特定的虚拟机(例如,端口 8080 转到您的一个虚拟机上的管理应用程序)。您会注意到,对于像 ssh 这样的东西,每个虚拟机都有自己的 ssh 端口,这是一个映射到特定虚拟机上的端口 22 的端点。

如果您希望您的虚拟机具有不同的 IP addresses/dns 名称,您需要:

  • 将它们拆分为单独的云服务 (.cloudapp.net)
  • 在新的资源管理器模型中部署它们,您不再有 .cloudapp.net 构造。