文档首页/ 弹性负载均衡 ELB/ API参考/ API(V3)/ 监听器/ 复制已有监听器 - CloneListener
更新时间:2026-07-15 GMT+08:00
分享

复制已有监听器 - CloneListener

功能介绍

复制已有的监听器到同VPC内的负载均衡器。

  • 仅支持同VPC实例间使用监听器复制功能。

  • 不支持网关型LB下监听器进行复制,也不支持复制到网关型LB下。

  • 仅同类型实例之间可以使用监听器复制功能。

  • 对复制的源监听器有如下限制:后端服务器总数不能超过1000;转发策略总数不能超过100。

  • 源监听器所在负载均衡器和目的监听器所在负载均衡器不能处于冻结、迁移状态。

  • 源监听器中若配置quic_config,复制后为null。

  • 七层转发策略配置为重定向到监听器,该转发策略不会进行复制。

调用方法

请参见如何调用API

授权信息

账号具备所有API的调用权限,如果使用账号下的IAM用户调用当前API,该IAM用户需具备调用API所需的权限。

  • 如果使用角色与策略授权,具体权限要求请参见权限和授权项
  • 如果使用身份策略授权,当前API调用无需身份策略权限。

URI

POST /v3/{project_id}/elb/listeners/{listener_id}/clone

表1 路径参数

参数

是否必选

参数类型

描述

project_id

String

参数解释:项目ID。获取方式请参见获取项目ID

约束限制:不涉及

取值范围:长度为32个字符,由小写字母和数字组成。

默认取值:不涉及

listener_id

String

参数解释:被复制监听器ID(UUID)。

约束限制:不涉及

取值范围:标准的UUID格式,长度为36个字符。

默认取值:不涉及

请求参数

表2 请求Header参数

参数

是否必选

参数类型

描述

X-Auth-Token

String

参数解释:IAM鉴权Token。

约束限制:不涉及

取值范围:不涉及

默认取值:不涉及

表3 请求Body参数

参数

是否必选

参数类型

描述

target_listener_params

Array of CloneListenerOption objects

参数解释:复制后的新监听器相关配置。

约束限制:不涉及

表4 CloneListenerOption

参数

是否必选

参数类型

描述

name

String

参数解释:新监听器的名称。

约束限制:不涉及

取值范围:[0-255]个字符,传入空字符串则取默认值。

默认取值:原监听器名称+ “-copy”。

loadbalancer_id

String

参数解释:新监听器所在的负载均衡器ID(UUID)。

约束限制

  • 不支持复制到网关型负载均衡器。

  • 目的负载均衡器类型需要支持源监听器协议。源监听器协议为HTTP、HTTPS,目的负载均衡器需要为应用型负载均衡器;源监听器协议为TCP、UDP、TLS,目的负载均衡器需要为网络型负载均衡器。

  • 只支持共享型负载均衡器复制到共享型负载均衡器,独享型负载均衡器复制到独享型负载均衡器。

  • 源监听器的负载均衡器启用IP类型后端转发,目的负载均衡器也需要启动IP类型后端转发功能。

  • 源监听器协议为TLS,目的负载均衡器需要支持创建TLS协议监听器。

取值范围:标准的UUID格式,长度为36个字符。

默认取值:不涉及

protocol_port

Integer

参数解释:新监听器的监听端口。

约束限制

  • 不能与目的负载均衡器下已有监听器监听端口重复。

  • 0表示开启监听端口范围的能力,此时port_ranges为必填字段。

  • 共享型负载均衡器上的HTTP和TERMINATED_HTTPS监听器不支持设置21端口。

取值范围:0-65535

默认取值:不涉及

port_ranges

Array of PortRange objects

参数解释:端口监听范围(闭区间),最多指定10个端口组,每个组范围不可有重叠部分。

约束限制

  • 仅当protocol_port为0或未传入protocol_port时可以传入该字段。

  • 仅TCP, UDP,TLS监听器支持该字段。

  • 不能与目的负载均衡器下已有端口冲突

reuse_pool

Boolean

参数解释:新监听器是否复用或复制源监听器的后端服务器组和后端服务器的标识。

  • 复用:目的监听器将会直接使用源监听器的后端服务器组。

  • 复制:系统将会根据原有配置创建新的后端服务器组,然后将其关联到目的监听器使用。

  • 配置为true时,需要开启后端服务器组多挂实例功能。

  • 只在独享型场景复制、同VPC场景可配。

  • true:复用源监听器的后端服务器组。

  • false:复制源监听器的后端服务器组。

约束限制

取值范围

默认取值:false

subnet_mapping_list

Array of SubnetMappingList objects

参数解释:源监听器下后端服务器子网信息和新监听器下后端服务器子网信息一一对应关系。

约束限制

  • 将监听器复制到不同VPC下的负载均衡器时,该字段必填。复制到同一个VPC下的负载均衡器时不填。

  • 若源监听器所在负载均衡器已开启ip_target_enable(该功能默认不开启),则不允许跨VPC复制,即该字段不允许填。

  • 每一组subnet_cidr_id都需要是新监听器下后端服务器的VPC子网ID,每一组dst_subnet_cidr_id都需要为源监听器下后端服务器的VPC子网ID,不允许少填多填、或重复对应关系。

  • 每一组的subnet_cidr_id和dst_subnet_cidr_id的两个子网必须存在且网段相同。

不支持该字段,请勿使用。

表5 PortRange

参数

是否必选

参数类型

描述

start_port

Integer

参数解释:起始端口。

约束限制:不涉及

取值范围:1-65535

默认取值:不涉及

end_port

Integer

参数解释:结束端口。

约束限制:大于等于起始端口。

取值范围:1-65535

默认取值:不涉及

表6 SubnetMappingList

参数

是否必选

参数类型

描述

subnet_cidr_id

String

参数解释:源监听器下后端服务器所在VPC的子网ID。

约束限制:不涉及

取值范围:标准的UUID格式,长度为36个字符。

默认取值:不涉及

dst_subnet_cidr_id

String

参数解释:新监听器下后端服务器需要绑定的VPC子网ID。

约束限制:该VPC子网ID需要存在,且与源子网网段相同。

取值范围:标准的UUID格式,长度为36个字符。

默认取值:不涉及

响应参数

状态码:200

表7 响应Body参数

参数

参数类型

描述

listener_list

Array of CloneListenerResp objects

参数解释:新监听器相关信息。

request_id

String

参数解释:请求的ID 。

取值范围:由数字、小写字母和中划线(-)组成的字符串,自动生成。

job_id

String

参数解释:监听器复制任务的ID,任务详情可通过GET /v3/{project_id}/elb/jobs/{job_id}进行查询。

取值范围:标准的UUID格式,长度为36个字符。

表8 CloneListenerResp

参数

参数类型

描述

id

String

参数解释:新监听器ID。

取值范围:标准的UUID格式,长度为36个字符。

loadbalancer_id

String

参数解释:目的负载均衡器ID。

取值范围:标准的UUID格式,长度为36个字符。

protocol_port

Integer

参数解释:新监听器监听端口。

取值范围:1-65535

port_ranges

Array of ResPortRange objects

参数解释:端口监听范围(闭区间)。

表9 ResPortRange

参数

参数类型

描述

start_port

Integer

参数解释:起始端口。

取值范围:1-65535

end_port

Integer

参数解释:结束端口。

取值范围:1-65535

请求示例

复制已有监听器。

POST https://{ELB_Endpoint}/v3/{project_id}/elb/listeners/{listener_id}/clone

{
  "target_listener_params" : [ {
    "name" : "xx-clone",
    "loadbalancer_id" : "fb624475-734a-470a-85ed-bd8828bae924",
    "protocol_port" : 425,
    "reuse_pool" : false
  } ]
}

响应示例

状态码:200

操作正常返回。

{
  "request_id" : "11750ade-148f-4498-bd7a-e07190a1f5fe",
  "job_id" : "aa132002-c0a8-473b-82b4-69fd2d6f87d2",
  "listener_list" : [ {
    "id" : "81fdfab0-35c0-476e-96df-e00797076843",
    "loadbalancer_id" : "fb624475-734a-470a-85ed-bd8828bae924",
    "protocol_port" : 425,
    "port_ranges" : null
  } ]
}

SDK代码示例

SDK代码示例如下。

复制已有监听器。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
package com.huaweicloud.sdk.test;

import com.huaweicloud.sdk.core.auth.ICredential;
import com.huaweicloud.sdk.core.auth.BasicCredentials;
import com.huaweicloud.sdk.core.exception.ConnectionException;
import com.huaweicloud.sdk.core.exception.RequestTimeoutException;
import com.huaweicloud.sdk.core.exception.ServiceResponseException;
import com.huaweicloud.sdk.elb.v3.region.ElbRegion;
import com.huaweicloud.sdk.elb.v3.*;
import com.huaweicloud.sdk.elb.v3.model.*;

import java.util.List;
import java.util.ArrayList;

public class CloneListenerSolution {

    public static void main(String[] args) {
        // The AK and SK used for authentication are hard-coded or stored in plaintext, which has great security risks. It is recommended that the AK and SK be stored in ciphertext in configuration files or environment variables and decrypted during use to ensure security.
        // In this example, AK and SK are stored in environment variables for authentication. Before running this example, set environment variables CLOUD_SDK_AK and CLOUD_SDK_SK in the local environment
        String ak = System.getenv("CLOUD_SDK_AK");
        String sk = System.getenv("CLOUD_SDK_SK");
        String projectId = "{project_id}";

        ICredential auth = new BasicCredentials()
                .withProjectId(projectId)
                .withAk(ak)
                .withSk(sk);

        ElbClient client = ElbClient.newBuilder()
                .withCredential(auth)
                .withRegion(ElbRegion.valueOf("<YOUR REGION>"))
                .build();
        CloneListenerRequest request = new CloneListenerRequest();
        request.withListenerId("{listener_id}");
        CloneListenerRequestBody body = new CloneListenerRequestBody();
        List<CloneListenerOption> listbodyTargetListenerParams = new ArrayList<>();
        listbodyTargetListenerParams.add(
            new CloneListenerOption()
                .withName("xx-clone")
                .withLoadbalancerId("fb624475-734a-470a-85ed-bd8828bae924")
                .withProtocolPort(425)
                .withReusePool(false)
        );
        body.withTargetListenerParams(listbodyTargetListenerParams);
        request.withBody(body);
        try {
            CloneListenerResponse response = client.cloneListener(request);
            System.out.println(response.toString());
        } catch (ConnectionException e) {
            e.printStackTrace();
        } catch (RequestTimeoutException e) {
            e.printStackTrace();
        } catch (ServiceResponseException e) {
            e.printStackTrace();
            System.out.println(e.getHttpStatusCode());
            System.out.println(e.getRequestId());
            System.out.println(e.getErrorCode());
            System.out.println(e.getErrorMsg());
        }
    }
}

复制已有监听器。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# coding: utf-8

import os
from huaweicloudsdkcore.auth.credentials import BasicCredentials
from huaweicloudsdkelb.v3.region.elb_region import ElbRegion
from huaweicloudsdkcore.exceptions import exceptions
from huaweicloudsdkelb.v3 import *

if __name__ == "__main__":
    # The AK and SK used for authentication are hard-coded or stored in plaintext, which has great security risks. It is recommended that the AK and SK be stored in ciphertext in configuration files or environment variables and decrypted during use to ensure security.
    # In this example, AK and SK are stored in environment variables for authentication. Before running this example, set environment variables CLOUD_SDK_AK and CLOUD_SDK_SK in the local environment
    ak = os.environ["CLOUD_SDK_AK"]
    sk = os.environ["CLOUD_SDK_SK"]
    projectId = "{project_id}"

    credentials = BasicCredentials(ak, sk, projectId)

    client = ElbClient.new_builder() \
        .with_credentials(credentials) \
        .with_region(ElbRegion.value_of("<YOUR REGION>")) \
        .build()

    try:
        request = CloneListenerRequest()
        request.listener_id = "{listener_id}"
        listTargetListenerParamsbody = [
            CloneListenerOption(
                name="xx-clone",
                loadbalancer_id="fb624475-734a-470a-85ed-bd8828bae924",
                protocol_port=425,
                reuse_pool=False
            )
        ]
        request.body = CloneListenerRequestBody(
            target_listener_params=listTargetListenerParamsbody
        )
        response = client.clone_listener(request)
        print(response)
    except exceptions.ClientRequestException as e:
        print(e.status_code)
        print(e.request_id)
        print(e.error_code)
        print(e.error_msg)

复制已有监听器。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
package main

import (
	"fmt"
	"github.com/huaweicloud/huaweicloud-sdk-go-v3/core/auth/basic"
    elb "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/elb/v3"
	"github.com/huaweicloud/huaweicloud-sdk-go-v3/services/elb/v3/model"
    region "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/elb/v3/region"
)

func main() {
    // The AK and SK used for authentication are hard-coded or stored in plaintext, which has great security risks. It is recommended that the AK and SK be stored in ciphertext in configuration files or environment variables and decrypted during use to ensure security.
    // In this example, AK and SK are stored in environment variables for authentication. Before running this example, set environment variables CLOUD_SDK_AK and CLOUD_SDK_SK in the local environment
    ak := os.Getenv("CLOUD_SDK_AK")
    sk := os.Getenv("CLOUD_SDK_SK")
    projectId := "{project_id}"

    auth, err := basic.NewCredentialsBuilder().
        WithAk(ak).
        WithSk(sk).
        WithProjectId(projectId).
        SafeBuild()

    if err != nil {
        fmt.Println(err)
        return
    }

    hcClient, err := elb.ElbClientBuilder().
         WithRegion(region.ValueOf("<YOUR REGION>")).
         WithCredential(auth).
         SafeBuild()


    if err != nil {
        fmt.Println(err)
        return
    }

    client := elb.NewElbClient(hcClient)

    request := &model.CloneListenerRequest{}
	request.ListenerId = "{listener_id}"
	nameTargetListenerParams:= "xx-clone"
	protocolPortTargetListenerParams:= int32(425)
	reusePoolTargetListenerParams:= false
	var listTargetListenerParamsbody = []model.CloneListenerOption{
        {
            Name: &nameTargetListenerParams,
            LoadbalancerId: "fb624475-734a-470a-85ed-bd8828bae924",
            ProtocolPort: &protocolPortTargetListenerParams,
            ReusePool: &reusePoolTargetListenerParams,
        },
    }
	request.Body = &model.CloneListenerRequestBody{
		TargetListenerParams: listTargetListenerParamsbody,
	}
	response, err := client.CloneListener(request)
	if err == nil {
        fmt.Printf("%+v\n", response)
    } else {
        fmt.Println(err)
    }
}

更多编程语言的SDK代码示例,请参见API Explorer的代码示例页签,可生成自动对应的SDK代码示例。

状态码

状态码

描述

200

操作正常返回。

错误码

请参见错误码

相关文档