1. 弹性公网IP概述:为什么需要EIP
在云计算架构中,公网IP地址是云资源与互联网通信的桥梁。阿里云弹性公网IP(Elastic IP Address,简称EIP)是一种可以独立购买和持有的公网IP地址资源。与传统的固定公网IP不同,EIP与云资源(如ECS实例)解耦,可以在不同实例之间动态绑定和解绑,提供了前所未有的灵活性和管理便利性。
EIP本质上是一种NAT IP,它实际位于阿里云的公网网关上,通过NAT方式映射到被绑定的云资源上。这意味着在ECS实例的私网网卡上无法直接看到EIP地址,但实例可以通过EIP与公网进行通信。EIP的核心价值体现在以下几个方面:公网IP与ECS实例解耦,实现地址资源的独立管理;支持按需动态调整带宽峰值,业务高峰提升带宽、闲时降低带宽以节省成本;一个EIP可以依次绑定不同的云资源,实现IP地址的复用;以及EIP支持按量付费和包年包月两种计费模式,灵活适配不同业务场景。
与固定公网IP相比,EIP的最大优势在于其独立性和可迁移性。固定公网IP只能在ECS或CLB等实例创建时分配,创建后无法更换绑定或解绑,只能随着实例删除而释放。而EIP作为独立资源,可以单独创建、持有、随时绑定或解绑,满足动态变更公网IP的需求。对于需要频繁更换公网IP地址、或者希望实例释放后继续保留公网IP地址的场景,EIP是理想的选择。
2. 申请EIP:控制台操作全流程
使用EIP的第一步是申请一个属于自己的弹性公网IP实例。整个操作在阿里云控制台完成,流程清晰简洁。
需要先登录阿里云控制台,点击:阿里云控制台
登录控制台后,进入弹性公网IP管理控制台。在弹性公网IP页面,单击\"创建弹性公网IP\"按钮开始申请流程。在创建页面中,需要配置以下关键参数:
- 付费模式:选择\"按量付费\"或\"包年包月\"。按量付费适合短期或流量波动大的场景,包年包月适合长期稳定使用的业务。
- 地域:选择EIP所在的地域。必须确保EIP的地域与待绑定的云资源(如ECS实例)所在地域相同,因为EIP不支持跨地域绑定。
- 线路类型:通常选择BGP(多线),该线路类型覆盖大部分场景。部分地域支持BGP(多线)_精品线路,专为海外回中国内地流量优化。线路类型在创建后不支持转换。
- 流量计费方式:选择\"按固定带宽计费\"或\"按使用流量计费\"。固定带宽计费适合带宽需求稳定的业务,流量计费适合突发流量或带宽使用不规律的场景。
- 带宽峰值:设置EIP的最大带宽,单位Mbps。按量付费模式下,按固定带宽计费的EIP支持的最大带宽峰值为500 Mbps。
- 名称与资源组:为EIP设置便于识别的名称,并选择所属资源组进行权限管理。
配置完成后,单击\"立即购买\"并完成支付,EIP实例即创建成功。创建完成后,EIP的状态为\"可用\",此时尚未绑定任何云资源,需要进一步操作将其绑定到目标资源上。
3. 绑定云资源:让EIP真正发挥作用
EIP申请完成后,需要将其绑定到具体的云资源上,才能实现公网通信。EIP支持绑定到多种云资源类型。
3.1 绑定ECS实例
将EIP绑定到专有网络类型的ECS实例是最常见的用法。ECS实例绑定EIP后,即可获得公网通信能力。操作步骤如下。
在弹性公网IP管理控制台中,选择EIP所在地域,在EIP列表中找到目标EIP,在操作列单击\"绑定资源\"。在弹出的对话框中配置以下信息:
- 实例类型:选择\"云服务器ECS实例\"。
- 选择要绑定的实例:从下拉列表中选择目标ECS实例。
绑定时需要确保ECS实例处于\"运行中\"或\"已停止\"状态,且实例没有配置固定公网IP或绑定其他EIP。如果ECS实例已分配了固定公网IP,则不支持直接绑定EIP,但可以将固定公网IP转换为EIP后再进行绑定。
绑定成功后,可以通过登录ECS实例执行ping命令来测试公网连通性:
[root@xxx ~]# ping www.aliyun.com PING www.aliyun.com.w.cdngslb.com (183.146.XX.XX) 56(84) bytes of data. 64 bytes from 183.146.XX.XX: icmp_seq=1 ttl=53 time=12.245 ms 64 bytes from 183.146.XX.XX: icmp_seq=2 ttl=53 time=12.164 ms ^C --- www.aliyun.com ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1002ms
3.2 绑定辅助弹性网卡
在单个ECS实例上托管多个应用时,可以通过为每个应用分配独立的辅助弹性网卡并绑定独立的EIP,实现每个应用对外呈现独立的公网IP地址。EIP支持以普通模式绑定辅助弹性网卡,辅助弹性网卡支持绑定的EIP数量取决于其私网IP数量。
此外,EIP还支持\"网卡可见模式\"绑定到辅助弹性网卡。在该模式下,EIP不再是公网网关上的NAT IP,而是直接替换辅助弹性网卡的私网IP,辅助弹性网卡变为纯公网网卡。此模式支持全部IP协议类型,包括FTP、H.323、SIP、DNS、RTSP等需要感知源IP地址的协议,但仅支持绑定辅助弹性网卡(不支持直接绑定ECS或ECS的主网卡),且有地域限制。
3.3 绑定负载均衡SLB实例
EIP支持绑定到专有网络类型的私网CLB实例、ALB实例和NLB实例。绑定ALB实例和NLB实例需在负载均衡控制台进行操作。创建公网类型的ALB或NLB实例时,可以选择自动分配EIP或选择已有EIP。私网类型的ALB或NLB实例也可以变更为公网类型并分配EIP。
3.4 绑定NAT网关
将EIP绑定到公网NAT网关,可以为VPC内的多个ECS实例提供统一的公网出口。一个公网NAT网关支持绑定20个EIP。从2022年9月19日起,新创建的公网NAT网关绑定一个EIP时会占用NAT网关所在交换机的一个私网IP地址,需要确保交换机内有足够的空闲私网地址。
4. 通过API和SDK自动化管理EIP
对于需要批量管理或自动化运维的场景,阿里云提供了完善的OpenAPI和SDK支持。通过API调用,可以实现EIP的申请、绑定、解绑、查询、释放等全生命周期管理。
4.1 核心API接口
EIP管理涉及的核心OpenAPI包括:
- AllocateEipAddress:申请EIP实例。
- AssociateEipAddress:将EIP绑定到云产品实例。
- UnassociateEipAddress:将EIP从云产品实例解绑。
- DescribeEipAddresses:查询EIP实例列表及详情。
- ReleaseEipAddress:释放EIP实例。
API调用频率有限制,每用户每天调用API的次数如果大于500次会触发API限速。
4.2 Python SDK代码示例
以下示例展示如何使用Python SDK创建EIP并将其绑定到ECS实例。
首先,安装阿里云VPC SDK:
pip install alibabacloud_vpc20160428
然后,编写Python代码:
# -*- coding: utf-8 -*- import os from alibabacloud_vpc20160428.client import Client as VpcClient from alibabacloud_vpc20160428.models import AllocateEipAddressRequest, AssociateEipAddressRequest from alibabacloud_tea_openapi.models import Config # 配置访问凭证 config = Config( access_key_id=os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_ID'), access_key_secret=os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_SECRET'), region_id='cn-hangzhou' ) client = VpcClient(config) # 1. 申请EIP allocate_request = AllocateEipAddressRequest( bandwidth='5', instance_charge_type='PostPaid', internet_charge_type='PayByTraffic', isp='BGP' ) allocate_response = client.allocate_eip_address(allocate_request) eip_id = allocate_response.body.allocation_id print(f'EIP创建成功,ID: {eip_id}') # 2. 绑定EIP到ECS实例 associate_request = AssociateEipAddressRequest( allocation_id=eip_id, instance_id='i-xxxxxxxxxxxx', instance_type='EcsInstance' ) associate_response = client.associate_eip_address(associate_request) print(f'EIP绑定成功,请求ID: {associate_response.body.request_id}')
使用API前需要创建RAM用户并完成授权,建议使用RAM用户的AccessKey进行API调用,避免使用主账号AccessKey带来的安全风险。RAM用户需要被授予AliyunVPCFullAccess等权限策略才能操作EIP资源。
4.3 Terraform基础设施即代码
Terraform是流行的基础设施即代码工具,可以通过声明式配置管理EIP资源。以下Terraform配置文件展示如何创建VPC、交换机、ECS实例并绑定EIP。
provider "alicloud" { region = var.region } variable "region" { default = "cn-beijing" } # 创建VPC resource "alicloud_vpc" "main" { vpc_name = "eip-demo-vpc" cidr_block = "192.168.0.0/16" } # 创建交换机 resource "alicloud_vswitch" "main" { vpc_id = alicloud_vpc.main.id cidr_block = "192.168.1.0/24" zone_id = "cn-beijing-g" } # 创建安全组 resource "alicloud_security_group" "default" { name = "eip-demo-sg" vpc_id = alicloud_vpc.main.id } # 创建ECS实例 resource "alicloud_instance" "main" { image_id = "ubuntu_22_04_x64_20G_alibase_20230327.vhd" instance_type = "ecs.n4.small" security_groups = [alicloud_security_group.default.id] vswitch_id = alicloud_vswitch.main.id instance_name = "eip-demo-ecs" } # 申请EIP resource "alicloud_eip" "main" { bandwidth = "5" internet_charge_type = "PayByTraffic" instance_charge_type = "PostPaid" } # 绑定EIP到ECS实例 resource "alicloud_eip_association" "main" { allocation_id = alicloud_eip.main.id instance_id = alicloud_instance.main.id }
通过Terraform管理EIP,可以实现版本控制、自动化部署和团队协作,是DevOps实践的理想选择。
5. 高级场景:NAT网关与共享带宽
5.1 NAT网关:统一公网出口
当VPC内有多台ECS实例需要访问互联网,但希望使用统一的公网IP地址作为出口时,可以通过公网NAT网关绑定EIP并配置SNAT规则来实现。公网NAT网关支持绑定多个EIP,绑定后可以为不同子网或实例配置不同的SNAT策略。
配置公网NAT网关的SNAT功能后,VPC内的ECS实例可以通过NAT网关访问互联网,所有出站流量都经过绑定的EIP,实现了统一的公网出口IP。这对于需要将出口IP加入白名单、或者进行流量审计的场景非常实用。
5.2 共享带宽:降低带宽成本
共享带宽是阿里云提供的地域级带宽共享和复用服务。创建共享带宽实例后,可以将多个按量付费的EIP添加到同一个共享带宽实例中,这些EIP绑定的ECS实例、SLB实例和NAT网关将共享该共享带宽的带宽资源。
使用共享带宽的核心价值在于\"地域级资源共享\"。当多个业务模块需要独立的公网访问权限但带宽使用不均衡时,共享带宽可以避免为每个EIP单独购买固定带宽,从而显著降低公网成本,实测可节省约30%的费用。
将EIP加入共享带宽需要满足以下条件:EIP的计费方式为按量付费、地域与共享带宽实例相同、线路类型与共享带宽实例一致。加入共享带宽后,EIP原本的带宽峰值和计费方式将失效,统一使用共享带宽的带宽峰值和计费方式,但EIP配置费仍需正常支付。
6. 安全管理与权限控制
6.1 RAM权限管理
为了保证账号安全,强烈建议使用RAM子账号进行EIP的日常管理,避免使用主账号AccessKey。RAM用户可以被授予不同的权限策略来实现细粒度的访问控制:
- AliyunVPCReadOnlyAccess:只读访问EIP的权限。
- AliyunVPCFullAccess:管理EIP的完整权限。
可以创建自定义权限策略,精确控制RAM用户对特定EIP资源的操作权限。
6.2 安全组与网络ACL
EIP绑定到ECS实例后,实例的公网访问仍然受安全组规则的控制。需要在ECS实例的安全组中添加入方向和出方向的规则,允许或拒绝特定的公网流量。安全组规则可以基于IP地址、端口范围、协议类型等进行精细化配置,是保护云资源安全的第一道防线。
6.3 DDoS基础防护
EIP默认提供DDoS基础防护能力。当EIP遭受DDoS攻击时,基础防护会自动启动,清洗攻击流量,保障业务的正常运行。如果业务对DDoS防护有更高要求,可以购买DDoS防护增强型EIP或额外购买DDoS高防服务。
7. 成本优化与计费选型
合理选择EIP的计费方式和带宽配置,可以有效控制公网成本。EIP的费用主要由三部分组成:EIP配置费(按量付费模式下占用EIP资源的费用)、公网网络费(带宽或流量费用)、以及可能产生的其他增值服务费用。
7.1 按量付费 vs 包年包月
按量付费适合短期或流量波动大的场景,用户只需为实际使用的带宽和流量付费,灵活性高。按量付费模式下,1-5Mbps带宽按每小时0.0625元计费,6Mbps及以上按每小时0.25元计费。如果仅需使用几天或流量突发,按量付费更具成本优势。
包年包月适合长期稳定使用的业务,预付费模式通常比按量付费更经济。以华北1(青岛)为例,1Mbps带宽配置年付仅需248.40元。如果每月带宽使用时长超过200小时,包年包月通常更划算。
7.2 固定带宽 vs 按流量计费
按固定带宽计费适合带宽需求稳定、可预测的业务,如企业官网、OA系统等。业务高峰时提升带宽保障体验,闲时降低带宽节省成本。
按使用流量计费适合突发流量或带宽使用不规律的场景,如游戏、视频行业等。建议初创企业选择按流量计费起步,中大型业务采用带宽加流量的混合模式。
7.3 共享带宽优化
如前文所述,将多个EIP加入共享带宽实例是降低公网成本的有效手段。通过带宽复用,可以避免为每个EIP单独购买固定带宽,尤其适合多业务模块需要独立公网IP的场景。
8. 常见问题与解答
问1:EIP和ECS固定公网IP有什么区别?
固定公网IP只能在ECS实例创建时分配,创建后无法更换绑定或解绑,只能随实例删除。EIP是独立的公网IP资源,可以单独创建与持有,支持动态绑定和解绑,灵活性更高。
问2:一个EIP可以同时绑定多个云资源吗?
不可以。一个EIP同时只能绑定一个云资源。但一个ECS实例可以通过绑定多个辅助弹性网卡并分别为其绑定EIP的方式,实现单个ECS实例关联多个EIP。
问3:EIP是否支持跨地域绑定?
不支持。EIP和要绑定的云资源必须在同一个地域。EIP没有可用区属性,只要云资源和EIP属于同一地域,就可以跨可用区绑定。
问4:一个账号可以申请多少个EIP?
一个账号默认最多可以申请20个EIP,如果业务需要更多,可以提交工单申请提升配额。
问5:EIP绑定ECS实例后为什么无法访问公网?
首先检查EIP的绑定状态是否正常,其次检查ECS实例的安全组规则是否允许相应的出方向和入方向流量,最后确认ECS实例的操作系统内网络配置是否正确。
问6:按量付费EIP解绑后为什么还在收费?
按量付费EIP解绑后仍需支付EIP配置费,直到EIP被释放为止。如果不再使用该EIP,请及时在控制台释放以避免持续产生费用。