1. 程式人生 > >彈性網絡卡支援私網多IP

彈性網絡卡支援私網多IP

分配私網多IP

  1. 目前私網多IP功能只支援IPv4且白名單開放,白名單申請請提交工單
  2. 您需要一臺支援私網多IP的ECS。支援私網多IP的ECS規格可通過介面DescribeInstanceTypes查詢。
  3. 為ECS的主網絡卡或輔助網絡卡分配私網多IP。分配私網多IP介面AssignPrivateIpAddresses。查詢分配的IP地址介面DescribeNetworkInterfaces
  4. 配置私網多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

  1. 使用介面DescribeNetworkInterfaces查詢分配的輔助IP地址。
  2. 使用介面UnassignPrivateIpAddresses回收私網多IP。

多IP使用注意事項

  1. 目前私網多IP功能只支援IPv4且白名單開放,白名單申請請
    提交工單
  2. 狀態限制:

    • 網絡卡必須為 已繫結(InUse)或 可用(Available)狀態。
    • 主網絡卡分配回收私網多IP,其ECS必須為執行中(Running)或者 已停止(Stopped)狀態
  3. Quota限制,查詢規格私網IP Quota途徑:Helper文件,或者介面DescribeInstanceTypes

    • 當網絡卡已經掛載到例項上,例項上每個網絡卡分配的私網IP(包括主私網IP)個數不能大於例項規格私網IP Quota。
    • 當網絡卡為Available狀態,最多能分配10個私網IP。
    • 當網絡卡已經分配的私網IP數量大於要掛載例項規格私網IP Quota,不允許掛載。
    • 當例項上網絡卡分配的私網IP數量大於目標規格支援的私網IP Quota,不允許變配。
  4. 安全組

    • 一個安全組內最多2000個私網IP。
    • 分配的輔助IP所屬的安全組和其網絡卡一致。
  5. 只支援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"])

 


原文連結
本文為雲棲社群原創內容,未經允許不得轉載。