无法直接在 GKE pod 中挂载 google filestore(不使用 PV)

问题描述 投票:0回答:2

我正在尝试将 Google Filestore 备份到 GCS 存储桶。我还想将主要区域中文件存储的内容同步到次要区域中的另一个文件存储。

为此,我创建了一个 bash 脚本,该脚本在计算引擎虚拟机中运行良好。我已将其转换为 docker 容器,我在 GKE 集群内作为 kubernetes cronjob 运行。

但是当我在 GKE pod 中运行脚本时,出现以下错误:

root@filestore-backup-1594023480-k9wmn:/# mount 10.52.219.10:/vol1 /mnt/filestore-primary 
mount.nfs: access denied by server while mounting 10.52.219.10:/vol1

我能够从容器连接到文件存储:

root@filestore-backup-1594023480-k9wmn:/# telnet 10.52.219.10 111 
Trying 10.52.219.10... 
Connected to 10.52.219.10. 
Escape character is '^]'.

Pod IP 范围也添加到 VPC IP 范围。 Filestore 已被授予完全访问权限以允许 VPC。相同的脚本在计算引擎虚拟机中运行良好。

为什么在 GKE pod 中安装 google filestore 不起作用?


用于备份谷歌文件存储的 bash 脚本:

#!/bin/bash

# Create the GCloud Authentication file if set
    touch /root/gcloud.json
    echo "$GCP_GCLOUD_AUTH" > /root/gcloud.json
    gcloud auth activate-service-account --key-file=/root/gcloud.json


#backup filestore to GCS

DATE=$(date +"%m-%d-%Y-%T")

mkdir -p /mnt/$FILESHARE_MOUNT_PRIMARY
mount $FILESTORE_IP_PRIMARY:/$FILESHARE_NAME_PRIMARY /mnt/$FILESHARE_MOUNT_PRIMARY

gsutil rsync -r /mnt/$FILESHARE_MOUNT_PRIMARY/ gs://$GCP_BUCKET_NAME/$DATE/


#rsync filestore to secondary region

mkdir -p /mnt/$FILESHARE_MOUNT_SECONDARY
mount $FILESTORE_IP_SECONDARY:/$FILESHARE_NAME_SECONDARY /mnt/$FILESHARE_MOUNT_SECONDARY

rsync -avz /mnt/$FILESHARE_MOUNT_PRIMARY/ /mnt/$FILESHARE_MOUNT_SECONDARY/

所有变量都作为 yaml 中的环境变量传递。

docker google-cloud-platform google-kubernetes-engine kubernetes-cronjob google-cloud-filestore
2个回答
3
投票

您无法访问它的原因是,GKE 的使用文件存储的方法与其他 GCP 实例不同,为了能够挂载,您必须创建持久卷和持久卷声明。

  • 如果您只需要对文件存储进行一次静态访问,您可以按照本指南手动设置 PV 和 PVC 以附加到您的应用程序:

  • 如果您想让它更加动态并为更广泛的使用做好准备,请考虑使用 NFS 客户端配置程序。它将创建一个 storageClass ,可以在您的 yaml 上引用。简而言之,

    storageClass
    动态地为每个访问提供 PV 和 PVC。您可以按照本指南操作:

  • 此外,您还可以使用 Filestore CSI 驱动程序 使 GKE 工作负载能够动态创建和挂载 Filestore 卷,而无需使用 helm。但是,CSI 驱动程序不是受支持的 Google Cloud 产品,因此您应该考虑它是否适合您的生产环境:

选择你的路径,如果您有任何疑问,请在评论中告诉我。


0
投票

(抱歉还不能发表评论)

我有同样的问题,所选答案没有回答为什么? Filestore 作为标准 NFS 服务器公开并如此宣传。

很像原来的问题;即使我让 Filestore 接受 0.0.0.0/0,我仍然无法从 POD 内连接到 NFS 服务器(此处也称为 Filestore)。默认情况下,所有 VPC IP(包括 POD 别名范围)均已列入白名单。

在虚拟机上运行良好。

我可以确认 POD 可以连接到 NFS,但 NFS 因权限被拒绝而拒绝。

root@debian:~# netcat 172.23.53.2 2049 -vvv
Connection to 172.23.53.2 2049 port [tcp/*] succeeded!



mount -o rw,intr 172.23.53.2:/fsop ./nfs -vvv
mount.nfs: timeout set for Tue Oct  3 05:27:09 2023
mount.nfs: trying text-based options 'intr,vers=4.2,addr=172.23.53.2,clientaddr=10.220.0.28'
mount.nfs: mount(2): Permission denied
mount.nfs: access denied by server while mounting 172.23.53.2:/fsop
  1. Filestore 如何知道我正在尝试从 debian POD 连接?
  2. Filestore 的访问日志在哪里?
© www.soinside.com 2019 - 2024. All rights reserved.