• 弹性网卡支持私网多IP


    摘要: 弹性网卡支持多IP功能可以最多在一块弹性网卡配置20个私网IP地址,特别适用于于以下场景。 1.单个服务器上托管多个应用,提升实例利用率,每个应用对外暴露一个独立的服务IP地址。 2.当实例发生故障时可以将流量快速转移到另外一台正常实例的辅助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"])
  • 相关阅读:
    Labeling Balls
    Following Orders
    Frame Stacking
    Window Pains
    Sort it all out
    Ferry Loading||
    今年暑假不AC
    xcode10 出现 框架 或者 pod 出错
    网络请求 步骤
    swift UIAlertController使用 UIAlertController的宽度 为270
  • 原文地址:https://www.cnblogs.com/zhaowei121/p/10196494.html
Copyright © 2020-2023  润新知