彈性網卡支持私網多IP
阿新 • • 發佈:2018-12-29
main send can ssi describe per fig desc eat
摘要: 彈性網卡支持多IP功能可以最多在一塊彈性網卡配置20個私網IP地址,特別適用於於以下場景。 1.單個服務器上托管多個應用,提升實例利用率,每個應用對外暴露一個獨立的服務IP地址。 2.當實例發生故障時可以將流量快速轉移到另外一臺正常實例的輔助IP地址上,達到故障恢復的目的。
分配私網多IP
- 目前私網多IP功能只支持IPv4且白名單開放,白名單申請請提交工單。
- 您需要一臺支持私網多IP的ECS。支持私網多IP的ECS規格可通過接口DescribeInstanceTypes查詢。
- 為ECS的主網卡或輔助網卡分配私網多IP。分配私網多IP接口AssignPrivateIpAddresses。查詢分配的IP地址接口DescribeNetworkInterfaces。
-
配置私網多IP。登錄分配多IP的ECS,這時使用命令ifconfig不能看到分配的私網多IP,要使用ifconfig配置分配的IP之後才能看到。此時私網多IP配置完成,可以使用。
命令格式(此種配置方式重啟失效): # ifconfig eth0:{new ip name} {your ip address} netmask {your netmask} up for example: # ifconfig eth0:0 192.168.1.1 netmask 255.255.255.0 up
回收私網多IP
- 使用接口DescribeNetworkInterfaces查詢分配的輔助IP地址。
- 使用接口UnassignPrivateIpAddresses回收私網多IP。
多IP使用註意事項
- 目前私網多IP功能只支持IPv4且白名單開放,白名單申請請提交工單。
-
狀態限制:
- 網卡必須為 已綁定
(InUse)
或 可用(Available)
狀態。 - 主網卡分配回收私網多IP,其ECS必須為運行中
(Running)
或者 已停止(Stopped)
狀態
- 網卡必須為 已綁定
-
Quota限制,查詢規格私網IP Quota途徑:Helper文檔,或者接口DescribeInstanceTypes
- 當網卡已經掛載到實例上,實例上每個網卡分配的私網IP(包括主私網IP)個數不能大於實例規格私網IP Quota。
- 當網卡為
Available
狀態,最多能分配10個私網IP。 - 當網卡已經分配的私網IP數量大於要掛載實例規格私網IP Quota,不允許掛載。
- 當實例上網卡分配的私網IP數量大於目標規格支持的私網IP Quota,不允許變配。
-
安全組
- 一個安全組內最多2000個私網IP。
- 分配的輔助IP所屬的安全組和其網卡一致。
- 只支持VPC實例,按照指定IP地址分配輔助IP時,指定的IP地址必須在網卡所屬VPC內未被使用。
多IP分配回收代碼示例
# coding=utf-8
# if the python sdk is not install using ‘sudo pip install aliyun-python-sdk-ecs‘
# if the python sdk is install using ‘sudo pip install --upgrade aliyun-python-sdk-ecs‘
# make sure the sdk version is 4.7.1, you can use command ‘pip show aliyun-python-sdk-ecs‘ to check
import json
import logging
from aliyunsdkcore import client
from aliyunsdkecs.request.v20140526.AssignPrivateIpAddressesRequest import AssignPrivateIpAddressesRequest
from aliyunsdkecs.request.v20140526.UnassignPrivateIpAddressesRequest import UnassignPrivateIpAddressesRequest
# configuration the log output formatter, if you want to save the output to file,
# append ",filename=‘ecs_invoke.log‘" after datefmt.
logging.basicConfig(level=logging.INFO,
format=‘%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s‘,
datefmt=‘%a, %d %b %Y %H:%M:%S‘)
# send open api request
def _send_request(request):
request.set_accept_format(‘json‘)
try:
response_str = clt.do_action(request)
logging.info(response_str)
response_detail = json.loads(response_str)
return response_detail
except Exception as e:
logging.error(e)
# assign private ip addresses to eni
def assign_private_ip_addresses(eniId, count, private_ip_address_list):
request = AssignPrivateIpAddressesRequest()
request.set_NetworkInterfaceId(eniId)
if (count != None):
request.set_SecondaryPrivateIpAddressCount(count)
if (private_ip_address_list != None):
request.set_PrivateIpAddresss(private_ip_address_list)
_send_request(request)
# assign private ip addresses to eni by secondary private ip address count
def assign_private_ip_by_count(eniId, count):
assign_private_ip_addresses(eniId, count, None)
# assign private ip addresses to eni by secondary private ip address list
def assign_private_ip_by_addresses(eniId, private_ip_address_list):
assign_private_ip_addresses(eniId, None, private_ip_address_list)
# unassign private ip addresses by secondary private ip address list
def unassign_private_ip_addresses(eniId, private_ip_address_list):
request = UnassignPrivateIpAddressesRequest()
request.set_NetworkInterfaceId(eniId)
request.set_PrivateIpAddresss(private_ip_address_list)
_send_request(request)
if __name__ == ‘__main__‘:
# client init
clt = client.AcsClient(‘Your Access Key Id‘, ‘Your Access Key Secrect‘, ‘cn-zhangjiakou‘)
# assign_private_ip_by_count("eni-id", 1)
#
# assign_private_ip_by_addresses("eni-id", ["192.168.1.1", "192.168.1.2"])
#
# unassign_private_ip_addresses("eni-id", ["192.168.1.1", "192.168.1.2"])
彈性網卡支持私網多IP