更改两个EC2实例之间的主弹性网络接口(ENI)



我们可以将主弹性网络接口从Ec2实例更改为另一个Ec2吗?

我可以在Ec2实例之间交换次要ENI,但不能将主要ENI从一个Ec2实例更改为另一个。

是否可以更改主要ENI?

这是不可能的。Primary ENI在实例的生存期内被锁定到该实例,即使该实例已停止。

VPC中的每个实例都有一个默认的网络接口,称为主网络接口(eth0(。不能从实例分离主网络接口。

https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-eni.html

您可以交换几乎所有其他内容(例如块卷、用户数据和属性(,而不是移动主ENI。

就像在我的案例中一样,我想用它的Dockerized版本替换我的旧实例,但想重用它的旧IP地址。

我设法做到了这一点;新实例。已取消附加两个实例上的块卷。将新块卷附加到旧实例上。更新了旧实例的用户数据以匹配新实例的用户。已更新旧实例类型以匹配新实例类型。我还必须通过在不同的主机上执行以下操作来启用ENA支持:

aws ec2 modify-instance-attribute --instance-id <instance id> --ena-support

然后我又开始了旧的例子。

不确定这是否准确回答了您的问题。我想在这里对这两个术语加以区分。主要/次要和首选。辅助接口可以成为首选接口。

假设有两个EC2实例A和B。每个实例都有一个主ENI-ENI_A和ENI_B,它们是A和B各自的操作系统用来路由业务的首选ENI。现在需要创建另一个ENI,比如说ENI_C(eth1(,可用于迁移。这个ENI_C可以从实例A中解除连接,并连接到另一个实例B,反之亦然(正如您正确地做的那样(。

ENI_C必须成为首选网络接口,以便在连接到任何实例时路由流量。

这可以通过创建一个新的路由表来实现。将路由添加到默认网关,并指定何时使用新路由表的条件。

示例:

echo "1   test" >> /etc/iproute2/rt_tables
ip rule add from 10.1.0.0/24 table test                # When to use test routing table
ip route add default via 10.1.0.1 dev eth1 table test  # The default gateway

您还可以通过ENI_C添加高优先级默认路由,将度量值设置为低于100 的值,从而达到所需效果

route add -net default gw 10.1.0.1 netmask 0.0.0.0 dev eth1 metric 50  

相应地更改上述IP。

要测试ENI_C(eth1(是否是发送流量的首选NIC,请查看哪个NIC用于发送流量,例如发送到Google DNS(8.8.8.8(

ip route get 8.8.8.8