【问题标题】:aws efs connection timeout at mount挂载时的 aws efs 连接超时
【发布时间】:2021-12-01 22:27:24
【问题描述】:

我正在按照this 教程在 AWS EC2 实例上挂载 efs,但是当我执行挂载命令时

sudo mount -t nfs4 -o vers=4.1 $(curl -s http://169.254.169.254/latest/meta-data/placement/availability-zone).[EFS-ID].efs.[region].amazonaws.com:/ efs

我每次都遇到连接超时。

mount.nfs4: Connection timed out

这里可能有什么问题?

提前致谢!

【问题讨论】:

  • 你确定你在这一步中附加了安全组docs.aws.amazon.com/efs/latest/ug/…
  • @error2007s 感谢您指出这一点,看来我没有添加默认安全组,因为我遇到了连接超时。
  • 请将我的答案标记为正确。谢谢你
  • 您是否能够从浏览器加载站点:169.254.169.254/latest/meta-data/placement/availability-zone(在您的 EC2 实例之外。仅从您的普通计算机上?)我不能怀疑 AWS 服务器已关闭?
  • @user1709076 这个错误是由于 efs 和 ec2 之间没有通信造成的。解决方法是在同一个安全组中添加efs和ec2,允许所有流量或在安全组中打开端口2049。

标签: amazon-web-services amazon-ec2


【解决方案1】:

我发现此处接受的答案不正确且不安全,而 Bao 的上述答案非常接近 - 除非您的 EC2(挂载目标)安全组不需要 NFS Inbound。您只需要为您的 EC2 分配一个安全组(即使没有规则),这样您的 EFS 安全组就可以被限制在该安全组中……您知道,为了安全!以下是我发现的作品:

  • 为您的 EC2 实例创建一个新的安全组。将其命名为EFS Target,并将所有规则留空
  • 为您的 EFS 挂载创建一个新的安全组。将其命名为 EFS Mount,并在其中添加 NFS 的 inbound 规则。将此规则的 SOURCE 设置为您在上面创建的 EFS Target 安全组。这将 EFS 限制为只能连接到分配了 EFS Mount 安全组的 EC2 实例(见下文)。如果您不担心这一点,您可以从源下拉列表中选择“任何”,它会以同样的方式工作,而不会增加安全级别
  • 转到 EC2 控制台,并将 EFS Target 组添加到您的 EC2 实例,假设您要添加额外的安全性
  • 转到 EFS 控制台,选择您的 EFS 并选择管理文件系统访问
    • 对于每个 EFS 挂载目标(可用区),您需要添加 EFS Mount 安全组并删除 VPC 默认组(如果您还没有)
  • AWS 文档中的 mount 命令现在应该可以工作了

我不喜欢他们在这里混合白话,因为 EC2 是挂载目标,而且 EFS 为每个可用区都有单独的挂载目标。使他们的文档非常混乱,但按照上述步骤,我可以在 Ubuntu 服务器上安全地挂载 EFS。

【讨论】:

  • 伟大的工作斯科特。这应该是公认的答案。让安全组服从你的意愿的好方法。
  • @Scott 谢谢你,最好的答案。我建议添加 TL;DR:EFS 配置中的 SecGroups 是 EFS 所属的,而不是人们可能认为的 NFS 客户端。
  • 非常感谢!这有效
【解决方案2】:

将带有 NFS 和端口 2049 的类型添加到运行 EC2 实例和 EFS 的安全组的入站。它对我有用。

【讨论】:

  • 这是正确答案。向您的 EC2 实例安全组添加类型 NFS(它已配置为端口 2049)以及 EFS 所在的安全组的源,它开始工作。按照上述答案的建议公开端口 22 是不必要的,在很多情况下也不是一个好主意,也不能解决问题。
  • 是的,这确实有效。但是从 EC2 连接时我被拒绝访问。修复:删除 EFS 文件系统,现在创建一个 EFS,但这次在设置过程中,您必须将安全组分配给该阶段的每个挂载目标。不知何故,在创建 EFS 后更改挂载目标的安全组对我不起作用。 superuser.com/questions/1100770/…
【解决方案3】:

这里有一个不同的答案,因为我遇到了一个非常相似的错误并且没有一个答案适合。

我试图像下面这样挂载 NFS(在我的情况下,EKS 代表我这样做,但我在工作节点中手动测试了相同的命令,结果相同):

[root@host ~]# mount -t nfs fs-abc1234.efs.us-east-1.amazonaws.com:/persistentvolumes /mnt/test

输出为:mount.nfs: Connection timed out

当我简单地尝试相同的命令,但使用/ 作为路径时:

[root@host ~]# mount -t nfs fs-abc1234.efs.us-east-1.amazonaws.com:/ /mnt/test

它就像一个魅力!

我真的不明白一个可能的错误或丢失路径如何导致time out 类错误,但这是唯一可以为我解决问题的方法,所有网络配置都保持不变。

在使用 EKS/Kubernetes 时,我决定挂载 /,它可以工作,然后使用 subPath 更改容器配置中的卷挂载点。

【讨论】:

  • 这正是我的问题。看来我们无法挂载 EFS 缺失路径。 volumeMounts.subPath 适合我。谢谢。
【解决方案4】:

我遇到了同样的问题,按照 Amazon AWS 指南,它适用于我的一台服务器,但另一台不想挂载 EFS 卷。分析本地服务器消息日志,我发现即使关联的安全组设置为允许任何传出流量(在任何端口、任何外部地址等),传出的 TCP 流量也被阻止。在安全组上设置规则以允许从 EC2 主机到端口 2049 上的 EFS 服务的 TCP 连接没有任何效果,而是在本地 iptable 防火墙上设置特定规则得到了工作并解决了问题。我不知道为什么会出现这种差异,但它对我有用。据我所知,不应触及本地 iptables fw,它应该直接从 AWS 控制台的 SG 获取规则。

【讨论】:

    【解决方案5】:

    同样的问题。过了一会儿,我注意到它为挂载点选择了 3 个随机子网,每个 AZ 一个。

    我很不幸,其中一个子网没有正确的 NACL。 在为每个挂载点分配正确的子网/SG 后,它立即使用 DNS 和 IP 正常工作。

    【讨论】:

      猜你喜欢
      • 2022-07-07
      • 2021-07-03
      • 1970-01-01
      • 2020-12-07
      • 2018-07-22
      • 1970-01-01
      • 2021-12-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多