1. 登录到EC2 instance(也即EC2虚拟机)的操作系统里边,运行查看主机网卡的命令,比如'ifconfig' or 'ip address', 默认我们能看到有一个网卡,eth0,其地址就是private IP address。Private IP只能用于内网通讯,不能用于公网通讯。如果虚拟机需要被公网访问,或者需要访问公网,需要处于public subnet中,要用到下文提到的public IP address。

2. Public IP address是由图二中的Internet gateway(IGW),为我们的instance动态分配的一个公网IP。虚拟机要与公网通信,必须经过IGW。IGW上有一个public IP pool,每次启动一个处于public subnet的虚机时,就会从public IP pool中选中一个可用的IP,然后与该虚机的private IP做1对1映射。注意是1对1哦。这实际上用的是NAT(Network adress translation)技术。

3. Elastic IP adress也是public IP,只不过这个Elastic IP不是从IGW中的public IP pool中动态获取的,而是静态分配给了AWS当前用户,用户可以选择将这个Elastic IP分配给哪个EC2 instance。Public/Elastic IP对操作系统是不可见的,他们只是在防火墙上是可见的。EC2 虚拟机操作系统里边只能看到private IP。

4. 因为这些特性,所以虚拟机停止、再启动后, Private IP不变,但是public IP很有可能会变哦,因为之前的Public IP很有可能已经分给了别的刚启动的虚拟机。Elastic IP也不变,因为这个Elastic IP已经预先分配给了当前用户,所以启动别的账号的虚拟机是不会占用这个public IP的。需要注意的是,Elastic IP只要分配给了用户,即使没有与任何虚机关联,或者关联了,但是虚拟机没有启动,AWS也会收取少量费用。

5. 我们可以单独新建一个网卡,然后将Elastic IP与这个网卡关联。下一步,将这个网卡与某个虚拟机绑定,让该虚拟机有两个网卡 - 一个eth0,默认就有,一个eth1,就是我们自己创建的,然后attach到虚拟机上的。然后我们还可以将该网卡(eth1) 从虚拟机上dettatch, 然后将该网卡attach到别的虚拟机上。注意,虚拟机默认带的eth0网卡,我们不能将他从一个虚拟机迁移到另外一个虚拟机。

6. 如果虚拟机只有一个eth0网卡,那当我们将一个Elastic IP绑定到虚拟机后,虚拟机原有的public IP会被自动释放到IP地址池中,供别的虚机使用。然后我们再将该Elastic IP取消与该虚拟机的绑定,如果该虚拟机是UP状态,那AWS又会自动帮我们再从地址池中找一个public IP与该虚拟机绑定。 但是这只适用于虚拟机只有一个网卡的情况下。如果虚拟机有两个网卡,那我们将一个Elastic IP绑定到eth0后,再取消绑定,AWS不会帮我们再从地址池中找一个public IP映射到eth0上。

 

 

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐