在mount时aws efs连接超时

时间:2016-07-28 09:24:45

标签: amazon-web-services amazon-ec2

我正在关注this教程,以便在AWS EC2实例上安装efs,但是当我执行mount命令时

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

这可能是什么问题?

提前致谢!

5 个答案:

答案 0 :(得分:22)

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

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

我不喜欢他们在EC2作为装载目标方面如何混合白话,但EFS也为每个可用区域提供了单独的装载目标。使他们的文档非常混乱,但按照上述步骤允许我在Ubuntu服务器上安全地安装EFS。

答案 1 :(得分:16)

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

我试图像下面那样安装一个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来更改容器配置中的卷安装点。

答案 4 :(得分:-1)

EFS上发生ibm-mfp-push是由于未将安装了端口2049的安全组与EC2实例的安全组一起打开到要装载EFS的EC2实例。添加秒grp将使问题继续下去。

编辑:

除了打开端口2049,您还需要为efs添加VPC的默认安全组以连接到ec2实例。正如教程中所提到的

  

这可确保实例是Amazon EFS文件系统装入目标将在步骤2:创建Amazon EFS文件系统中授权连接的安全组的成员。

P.S。:我忘了将默认安全组添加到实例,这就是我收到连接超时错误的原因。