“重启”后无法连接到 EC2 实例

“重启”后无法连接到 EC2 实例

重新启动 m1.small 实例后,我无法连接到它。

我已经将公共 IP 与此实例关联。检查系统日志后,发现问题似乎出在这里:

cloud-init-nonethttp://11.84: waiting 10 seconds for network device
cloud-init-nonethttp://21.85: waiting 120 seconds for network device
cloud-init-nonethttp://141.85: gave up waiting for a network device.
Cloud-init v. 0.7.3 running 'init' at Sun, 18 May 2014 07:02:55 +0000. Up 142.54 seconds.
ci-info: +++++++++++++++++++++++Net device info++++++++++++++++++++++++
ci-info: +--------+-------+-----------+-----------+-------------------+
ci-info: | Device | Up | Address | Mask | Hw-Address |
ci-info: +--------+-------+-----------+-----------+-------------------+
ci-info: | lo | True | 127.0.0.1 | 255.0.0.0 | . |
ci-info: | eth0 | False | . | . | 02:43:xx:xx:xx:xx |
ci-info: +--------+-------+-----------+-----------+-------------------+
ci-info: !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!Route info failed!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

上面的消息后面跟着一堆这样的消息:

2014-05-18 07:02:56,178 - url_helper.pyWARNING:调用 http://169.254.169.254/2009-04-04/meta-data/instance-id失败 0/120 秒:请求错误 [HTTPConnectionPool(host='169.254.169.254',port=80):url 的最大重试次数超出:/2009-04-04/meta-data/instance-id(原因:Errno 101] 网络不可达)

这显然与网络接口无法正常工作有关。到目前为止,我已经尝试过以下方法:

  1. 从故障实例的自定义 AMI(从 EBS 创建)重新启动新实例。日志中显示相同的错误。

  2. 将新的网络接口附加到 EC2 实例。错误仍然存​​在。eth1 显示在列表中,但“up”列为 False。

答案1

这是因为有人进行了网络更改,导致实例无法访问。一个常见的网络设置问题是有人设置了静态 IP 地址,而根据 AWS 策略,Amazon EC2 会忽略该地址。

  1. 停止实例
  2. 从不可访问的实例中分离卷
  3. 将卷附加到正在运行的实例
  4. ssh 运行实例
  5. mkdir bad(创建挂载目录)
  6. 将卷装入 bad/
  7. cd /bad/etc/sysconfig/network-scripts(/bad 是挂载目录)
  8. vi ifcfg-eth0

    DEVICE=eth0 
    BOOTPROTO=dhcp 
    ONBOOT=yes 
    TYPE=Ethernet 
    USERCTL=yes 
    PEERDNS=yes 
    IPV6INIT=no 
    
  9. 分离卷
  10. 将卷附加到不可访问的实例
  11. 启动不可访问的实例

发现它正在工作。

答案2

@kapeels,

我刚刚遇到了同样的问题,就我而言,我在 VPC DHCP 选项集上使用内部 DNS 服务器设置,如果那里设置的 DNS 服务器关闭,所有 EC2 服务器启动都会遇到同样的问题。

从日志中我可以看到,服务器使用主机名进行了几次 API 调用,该主机名是使用 DHCP 选项集中的 DNS 进行转换的,但由于我的服务器已关闭,因此它可以获取主机名的 IP 并返回 169.* IP。

当我再次将 VPC DHCP 选项设置为 AmazonProvidedDNS 时,它就起作用了。

因此,基本上 AWS 完全忽略您的安全组来进行 API 调用,但依赖您的 DNS 服务器来解析主机名。:)

相关内容