在远程网络中的客户端上装载文件共享

本教程介绍如何在远程客户端(可以是其他 VPC 网络上的 Compute Engine 虚拟机、非 Google Cloud 虚拟机或终端)上装载 Filestore 文件共享。

您无法从 Internet 或直接通过 VPN 访问 Filestore 文件共享。Filestore 文件共享设计为只能装载到 Compute Engine 虚拟机中。但是,可以使用 Compute Engine 虚拟机作为代理,将文件共享装载到远程客户端上。

为此,您需要:

  • 在远程客户端的网络与 Filestore 实例的 VPC 网络之间建立 VPN 连接。
  • 在同一 VPC 网络上配置 Compute Engine 虚拟机,以便将 NFS 个数据包转发到 Filestore 实例。
  • 将远程客户端连接到 Compute Engine 虚拟机,以在远程客户端上装载 Filestore 实例的文件共享。

注意事项

此解决方案有几个注意事项:

  • 代理虚拟机是单点故障。如果出现故障,远程客户端将无法再访问文件共享。
  • 代理虚拟机是性能瓶颈,因为它在远程客户端和 Filestore 实例之间转发所有 NFS 流量。
  • 文件锁定不起作用。

目标

  • 配置 Compute Engine 虚拟机以将 NFS 数据包从远程客户端转发到 Filestore 实例。
  • 在远程客户端上装载 Filestore 文件共享。

费用

本教程使用 Google Cloud 的以下收费组件:

  • Compute Engine 虚拟机实例
  • Cloud VPN
  • Filestore 实例

请使用价格计算器根据您的预计使用情况来估算费用。 Google Cloud 新用户可能有资格申请免费试用

准备工作

  1. 登录您的 Google 帐号。

    如果您还没有 Google 帐号,请注册一个新帐号

  2. 在 Cloud Console 的项目选择器页面上,选择或创建 Cloud 项目。

    转到项目选择器页面

  3. 确保您的 Google Cloud 项目已启用结算功能。 了解如何确认您的项目已启用结算功能

创建代理虚拟机

代理虚拟机是一个 Linux Compute Engine 虚拟机,用于在远程客户端和 Filestore 实例之间转发 NFS 数据包。它必须与 Filestore 实例位于同一 VPC 网络中。

如需了解如何创建 Linux Compute Engine 虚拟机,请参阅 Linux 虚拟机使用快速入门

创建 Filestore 实例

在与代理虚拟机相同的 VPC 网络上创建 Filestore 实例

在代理虚拟机上配置转发

  1. 转到“虚拟机实例”页面
  2. 找到代理虚拟机,然后点击 SSH 以打开该虚拟机上的终端。
  3. 通过运行以下命令安装 iptables

    Debian/Ubuntu

        sudo apt-get install iptables
    

    RHEL/CentOS

        sudo yum install iptables
    

    SUSE

        sudo zypper -n install iptables
    
  4. 通过在代理虚拟机上运行以下命令来转发发往 Filestore 实例的 NFS 数据包:

    sudo iptables -A PREROUTING -t nat -i network-interface -p tcp --dport 111 -j DNAT --to filestore-ip-address:111
    sudo iptables -A PREROUTING -t nat -i network-interface -p tcp --dport 2049 -j DNAT --to filestore-ip-address:2049
    sudo iptables -A PREROUTING -t nat -i network-interface -p tcp --dport 2050 -j DNAT --to filestore-ip-address:2050
    sudo iptables -A FORWARD -p tcp -d filestore-ip-address --dport 111 -j ACCEPT
    sudo iptables -A FORWARD -p tcp -d filestore-ip-address --dport 2049 -j ACCEPT
    sudo iptables -A FORWARD -p tcp -d filestore-ip-address --dport 2050 -j ACCEPT
    sudo sysctl net.ipv4.ip_forward=1
    sudo iptables -t nat -A POSTROUTING -j MASQUERADE
    

    其中:

    • filestore-ip-address 是代理虚拟机要转发到的 Filestore 实例的 IP 地址。
    • network-interface 是代理虚拟机上的网络接口名称,例如 eth0。如需获取网络接口的名称,请在代理虚拟机上运行以下命令:

      sudo ifconfig
      

    转发的端口有:

    • 111: portmapper
    • 2049: nfs
    • 2050: mountd

在远程客户端的网络与代理虚拟机的 VPC 网络之间建立 VPN 连接。

必须先在远程客户端的网络与 Filestore 实例和代理虚拟机的 VPC 网络之间建立 VPN 连接,然后才能在远程客户端上装载 Filestore 文件共享。

在 Google Cloud 上配置 VPN 网关和隧道

创建高可用性 VPN。如需了解详细说明,请参阅创建连接到对等 VPN 网关的高可用性 VPN 网关

在远程网络上配置 VPN 网关和隧道:

在远程客户端上装载 Filestore 文件共享

  1. 在远程客户端上创建装载点目录:

    sudo mkdir -p mount-point-directory
    

    其中,mount-point-directory 是您要将 Cloud Filestore 文件共享映射到的路径。

  2. 通过在远程客户端上运行以下命令,在远程网络的客户端上装载 Filestore 实例:

    sudo mount proxy-ip-address:/file-share/[file-share-sub-dir] mount-point-directory
    

    其中:

    • proxy-ip-address 是代理实例的 IP 地址。
    • file-share 是 Filestore 实例上的文件共享的名称。
    • file-share-sub-dir 是您要装载的文件共享子目录的路径。如果要装载整个文件共享,请将此项留空。
    • mount-point-directory 是要将 Filestore 文件共享映射到远程客户端上的路径。

    示例:以下命令会将要转发到 IP 地址为 34.68.144.226 的 Linux Compute Engine 虚拟机的 Filestore 实例上的文件共享 vol1 装载到远程客户端上的装载点目录 /mnt/test

    sudo mount 34.68.144.226:/vol1 /mnt/test
    
  3. 通过在远程客户端上运行以下命令来确认您的配置有效:

    ls mount-point-directory
    

    其中,mount-point-directory 是装载点目录的路径。

    在前面的示例中,命令将是:

    ls /mnt/test
    

    如果在远程客户端上成功装载文件共享,系统将返回 ls 命令的结果。

问题排查

您可以通过在代理虚拟机上运行 tcpdump 来排查问题,以检查是否在转发 NFS 数据包:

  1. 安装 tcpdump

    Debian/Ubuntu

        sudo apt-get install tcpdump
    

    RHEL/CentOS

        sudo yum install tcpdump
    

    SUSE

        sudo zypper -n install tcpdump
    
  2. 运行以下命令以显示代理虚拟机正在传输或接收的数据包,但 SSHHTTP 数据包除外:

    sudo tcpdump -p -n not port 22 and not port 80
    

清理

完成远程网络教程中的在客户端上装载文件共享后,可以清理在 Google Cloud 上创建的资源,以免这些资源占用配额,以后也不会产生费用。以下部分介绍如何删除或关闭这些资源。

删除项目

为了避免产生费用,最简单的方法是删除您为本教程创建的项目。

要删除项目,请执行以下操作:

  1. 在 Cloud Console 中,转到管理资源页面。

    转到“管理资源”页面

  2. 在项目列表中,选择要删除的项目,然后点击删除
  3. 在对话框中输入项目 ID,然后点击关闭以删除项目。

删除 Compute Engine 实例

要删除 Compute Engine 实例,请运行以下命令:

  1. 在 Cloud Console 中,转到虚拟机实例页面。

    转到“虚拟机实例”页面

  2. 点击您要删除的实例对应的复选框。
  3. 点击删除 以删除实例。

删除 Filestore 实例

  1. 转到“Filestore 实例”页面
  2. 点击实例 ID 以打开“实例详情”页面。
  3. 点击删除
  4. 出现提示时,键入实例 ID,然后点击删除

删除 Cloud VPN 隧道

  1. 转到“Cloud VPN”页面
  2. 点击 Cloud VPN 隧道标签
  3. 点击隧道的名称,然后点击删除

后续步骤