配置云服务器高可用的IPv6虚拟IP功能
引导式阅读
Java
配置云服务器高可用的IPv6虚拟IP功能
作者
C***
上架时间
2023-11-13 07:08:49

版本说明

本示例配套的SDK版本为:3.0.59及以上版本

配置云服务器高可用的IPv6虚拟IP功能

本示例展示如何配置云服务器高可用的IPv6虚拟IP功能

功能介绍

配置云服务器高可用的IPv6虚拟IP功能

前置条件

1.已 注册 华为云,并完成 实名认证

2.获取华为云开发工具包(SDK),您也可以查看安装JAVA SDK。

3.已获取华为云账号对应的Access Key(AK)和Secret Access Key(SK)。请在华为云控制台“我的凭证 > 访问密钥”页面上创建和查看您的AK/SK。具体请参见 访问密钥

4.已具备开发环境 ,支持Java JDK 1.8及其以上版本。

SDK获取和安装

您可以通过Maven配置所依赖的虚拟私有云服务SDK

具体的SDK版本号请参见 SDK开发中心 (产品类别:虚拟私有云服务)

代码示例

以下代码展示如何配置云服务器高可用的虚拟IP功能

import com.huaweicloud.sdk.core.auth.BasicCredentials; import com.huaweicloud.sdk.core.auth.ICredential; import com.huaweicloud.sdk.core.exception.ClientRequestException; import com.huaweicloud.sdk.core.exception.ServerResponseException; import com.huaweicloud.sdk.vpc.v2.VpcClient; import com.huaweicloud.sdk.vpc.v2.model.AllowedAddressPair; import com.huaweicloud.sdk.vpc.v2.model.CreatePortOption; import com.huaweicloud.sdk.vpc.v2.model.CreatePortRequest; import com.huaweicloud.sdk.vpc.v2.model.CreatePortRequestBody; import com.huaweicloud.sdk.vpc.v2.model.CreatePortResponse; import com.huaweicloud.sdk.vpc.v2.model.FixedIp; import com.huaweicloud.sdk.vpc.v2.model.ListPortsRequest; import com.huaweicloud.sdk.vpc.v2.model.ListPortsResponse; import com.huaweicloud.sdk.vpc.v2.model.ShowSubnetRequest; import com.huaweicloud.sdk.vpc.v2.model.ShowSubnetResponse; import com.huaweicloud.sdk.vpc.v2.model.UpdatePortOption; import com.huaweicloud.sdk.vpc.v2.model.UpdatePortRequest; import com.huaweicloud.sdk.vpc.v2.model.UpdatePortRequestBody; import com.huaweicloud.sdk.vpc.v2.model.UpdatePortResponse; import com.huaweicloud.sdk.vpc.v2.region.VpcRegion; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.Arrays; /** * 配置云服务器高可用的IPv6虚拟IP功能 */ public class VPCPortBindIpv6AddressDemo { private static final Logger logger = LoggerFactory.getLogger(VPCPortBindIpv6AddressDemo.class.getName()); public static void main(String[] args) { // 认证用的ak和sk直接写到代码中有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全; // 本示例以ak和sk保存在环境变量中来实现身份验证为例,运行本示例前请先在本地环境中设置环境变量HUAWEICLOUD_SDK_AK和HUAWEICLOUD_SDK_SK。 String ak = System.getenv("HUAWEICLOUD_SDK_AK"); String sk = System.getenv("HUAWEICLOUD_SDK_SK"); ICredential auth = new BasicCredentials() .withAk(ak) .withSk(sk); VpcClient vpcClient = VpcClient.newBuilder() .withCredential(auth) .withRegion(VpcRegion.valueOf("cn-north-4")) .build(); // 双栈ECS 北京四region目前只支持可用区2 sn3规格实例,上海一region目前只支持C3 M3规格实例 String ecsId = "{ecs_ipv6_id}"; // 云服务器所在双栈VPC下的双栈子网 String subnetId = "{subnet_id}"; VPCPortBindIpv6AddressDemo demo = new VPCPortBindIpv6AddressDemo(); // 查询subnet获取networkId ShowSubnetResponse showSubnetResponse = demo.showSubnet(vpcClient, subnetId); String networkId = showSubnetResponse.getSubnet().getNeutronNetworkId(); String subnetIdV6 = showSubnetResponse.getSubnet().getNeutronSubnetIdV6(); // 1.创建IPv6虚拟IP CreatePortResponse createPortResponse = demo.createPort(vpcClient, networkId, subnetIdV6); // 2.通过云服务器的ID查询网卡信息,fixed_ips中存在IPv4地址和IPv6地址 ListPortsResponse listPortsResponse = demo.listPorts(vpcClient, ecsId, networkId); String portId = listPortsResponse.getPorts().get(0).getId(); String ipAddress = listPortsResponse.getPorts().get(0).getFixedIps().get(1).getIpAddress(); // 3.将云服务器与虚拟IP绑定 UpdatePortRequest updatePortRequest = new UpdatePortRequest() .withPortId(createPortResponse.getPort().getId()) .withBody(new UpdatePortRequestBody() .withPort(new UpdatePortOption() .withAllowedAddressPairs( Arrays.asList(new AllowedAddressPair().withIpAddress(ipAddress))) ) ); demo.updatePort(vpcClient, updatePortRequest); // 4.关闭云服务器网卡的源/目的检查 UpdatePortRequest updatePortReq = new UpdatePortRequest() .withPortId(portId) .withBody(new UpdatePortRequestBody() .withPort(new UpdatePortOption() .withAllowedAddressPairs( Arrays.asList(new AllowedAddressPair().withIpAddress("1.1.1.1/0"))) ) ); demo.updatePort(vpcClient, updatePortReq); } public ShowSubnetResponse showSubnet(VpcClient vpcClient, String subnetId) { ShowSubnetRequest showSubnetRequest = new ShowSubnetRequest().withSubnetId(subnetId); ShowSubnetResponse showSubnetResponse = null; try { showSubnetResponse = vpcClient.showSubnet(showSubnetRequest); logger.info(showSubnetResponse.toString()); } catch (ClientRequestException e) { logger.error(String.valueOf(e.getHttpStatusCode())); logger.error(e.toString()); } catch (ServerResponseException e) { logger.error(String.valueOf(e.getHttpStatusCode())); logger.error(e.getMessage()); } return showSubnetResponse; } public CreatePortResponse createPort(VpcClient vpcClient, String networkId, String subnetIdV6) { CreatePortRequest createPortRequest = new CreatePortRequest() .withBody(new CreatePortRequestBody() .withPort(new CreatePortOption() .withNetworkId(networkId) .withName("{port_name}") .withDeviceOwner("neutron:VIP_PORT") .withFixedIps(Arrays.asList(new FixedIp(). withSubnetId(subnetIdV6))) )); CreatePortResponse createPortResponse = null; try { createPortResponse = vpcClient.createPort(createPortRequest); logger.info(createPortResponse.toString()); } catch (ClientRequestException e) { logger.error(String.valueOf(e.getHttpStatusCode())); logger.error(e.toString()); } catch (ServerResponseException e) { logger.error(String.valueOf(e.getHttpStatusCode())); logger.error(e.getMessage()); } return createPortResponse; } public ListPortsResponse listPorts(VpcClient vpcClient, String ecsId, String networkId) { ListPortsRequest listPortsRequest = new ListPortsRequest().withDeviceId(ecsId).withNetworkId(networkId); ListPortsResponse listPortsResponse = null; try { listPortsResponse = vpcClient.listPorts(listPortsRequest); logger.info(listPortsResponse.toString()); } catch (ClientRequestException e) { logger.error(String.valueOf(e.getHttpStatusCode())); logger.error(e.toString()); } catch (ServerResponseException e) { logger.error(String.valueOf(e.getHttpStatusCode())); logger.error(e.getMessage()); } return listPortsResponse; } public UpdatePortResponse updatePort(VpcClient vpcClient, UpdatePortRequest updatePortRequest) { UpdatePortResponse updatePortResponse = null; try { updatePortResponse = vpcClient.updatePort(updatePortRequest); logger.info(updatePortResponse.toString()); } catch (ClientRequestException e) { logger.error(String.valueOf(e.getHttpStatusCode())); logger.error(e.toString()); } catch (ServerResponseException e) { logger.error(String.valueOf(e.getHttpStatusCode())); logger.error(e.getMessage()); } return updatePortResponse; } }

您可以在 虚拟私有云VPC服务文档API Explorer 查看具体信息。

修订记录

发布日期 文档版本 修订说明
2021/11/05 1.0 文档首次发布