问题描述

在云中环境,部署的应用到云服务(Cloud Service)都是动态的IP地址,所以在添加DNS记录的时候,都是使用CNAME,但如果需要在DNS中添加A记录,则需要一个固定IP。 

解决方案

Azure提供了保留IP的服务,可以通过​​New-AzureReservedIP​​命令来创建。然后再云服务(Cloud Service)中使用。操作步骤如下:

步骤一:通过powershell 命令进行创建保留IP

New-AzureReservedIP -ReservedIPName $Name -  -Location $Location

【Azure 云服务】Azure Cloud Service如何来设置固定IP地址(ReservedIP)_Cloud Service

 

  • Get-AzureReservedIP 查看创建的保留地址
  • Remove-AzureReservedIPAssociation 解除保留IP地址

 

步骤二:修改Cloud Service配置文件,把ReservedIP与Cloud Service关联,然后重新发布文件

<?xml version="1.0" encoding="utf-8"?>
<ServiceConfiguration serviceName="AzureCloudService2" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceConfiguration" osFamily="6" osVersion="*" schemaVersion="2015-04.2.6">
<Role name="WebRole1">
<Instances count="1" />
<ConfigurationSettings>
</ConfigurationSettings>
</Role>
<NetworkConfiguration>
<AddressAssignments>
<ReservedIPs>
<ReservedIP name="MyPassIp2"/>
</ReservedIPs>
</AddressAssignments>
</NetworkConfiguration>
</ServiceConfiguration>

或通过Powershell命令进行绑定

Set-AzureReservedIPAssociation -ReservedIPName MyPassIp2 -ServiceName <cloud service name>

 

附加因ReservedIP而引发的错误

1) 云服务在更新发布后无法修改RDP的密码,修改时出现错误消息:ReservedIP  was not mapped to an endpoint. The service definition must contain atleast one endpoint that maps to the ReservedIP.

【答】根据错误消息提示,查看到是ReservedIP地址没有绑定endpoint推断是新发布的配置文件中遗漏了该Cloud Service的ReservedIP配置部分。所以需要先解绑ReservedIP,重新绑定。 也可以再解绑后修改RDP密码。修改成功后重新绑定ReservedIP.  解决问题的过程中使用的命令正是:

Remove-AzureReservedIPAssociation -ReservedIPName <ReservedIPName> -ServiceName <ServiceName >

Set-AzureReservedIPAssociation<ReservedIPName> -ServiceName <ServiceName >

 

 

参考文档

Azure 云服务的配置 NetworkConfiguration 架构: ​​https://docs.azure.cn/zh-cn/cloud-services/schema-cscfg-networkconfiguration​

New-AzureReservedIP: ​​https://docs.microsoft.com/en-us/powershell/module/servicemanagement/azure.service/new-azurereservedip?view=azuresmps-4.0.0​

 

 

下表介绍了 ​​NetworkConfiguration​​ 元素的子元素。

​NETWORKCONFIGURATION 元素​​​元素说明AccessControl可选。 指定云服务中用于访问终结点的规则。 访问控制名称由 ​​name​​ 属性的字符串定义。 ​​AccessControl​​ 元素包含一个或多个 ​​Rule​​ 元素。 可定义多个 ​​AccessControl​​ 元素。规则可选。 指定应对指定的 IP 地址子网范围执行的操作。 规则的顺序由 ​​order​​ 属性的字符串值定义。 规则编号越低,优先级越高。 例如,可使用序号 100、200 和 300 指定规则。 序号为 100 的规则优先于序号为 200 的规则。

规则的操作由 ​​action​​ 属性的字符串定义。 可能的值包括:

- ​​permit​​ - 指定只有指定子网范围中的数据包才可以与终结点通信。
- ​​deny​​ - 指定拒绝对指定子网范围中终结点的访问。

受规则影响的 IP 地址的子网范围由 ​​remoteSubnet​​ 属性的字符串定义。 对规则的说明由 ​​description​​ 属性的字符串定义。EndpointAcl可选。 指定向终结点分配访问控制规则。 包含终结点的角色的名称由 ​​role​​ 属性的字符串定义。 终结点的名称由 ​​endpoint​​ 属性的字符串定义。 对于应该应用到终结点的 ​​AccessControl​​ 规则的集合,其名称在 ​​accessControl​​ 属性的字符串中定义。 可定义多个 ​​EndpointAcl​​ 元素。DnsServer可选。 指定 DNS 服务器的设置。 可以指定不使用虚拟网络的 DNS 服务器的设置。 DNS 服务器的名称由 ​​name​​ 属性的字符串定义。 DNS 服务器的 IP 地址由 ​​IPAddress​​ 属性的字符串定义。 该 IP 地址必须是有效的 IPv4 地址。VirtualNetworkSite可选。 指定要在其中部署云服务的虚拟网络站点的名称。 此设置不会创建虚拟网络站点。 它引用之前已在虚拟网络的网络文件中定义的站点。 一个云服务只能是一个虚拟网络的成员。 如未指定此设置,则云服务不会部署到虚拟网络。 虚拟网络站点的名称由 ​​name​​ 属性的字符串定义。InstanceAddress可选。 指定角色与虚拟网络中的子网或子网集的关联。 将角色名称关联到实例地址时,可以指定要将此角色与之关联的子网。 ​​InstanceAddress​​ 包含 Subnets 元素。 与一个或多个子网相关联的角色的名称由 ​​roleName​​ 属性的字符串定义。子网可选。 指定与网络配置文件中的子网名称相对应的子网。 子网的名称由 ​​name​​ 属性的字符串定义。ReservedIP可选。 指定应与部署关联的保留 IP 地址。 必须使用“创建保留 IP 地址”创建保留的 IP 地址。 云服务中的每个部署均可与一个保留 IP 地址相关联。 保留 IP 地址的名称由 ​​name​​ 属性的字符串定义。

当在复杂的环境中面临问题,格物之道需:浊而静之徐清,安以动之徐生。 云中,恰是如此!