GKE群集上的网络文件共享访问权限-Windows节点池

时间:2020-05-28 08:42:55

标签: kubernetes google-kubernetes-engine persistent-volumes google-cloud-filestore gce-persistent-disk

我们正在GKE群集(Windows节点池)上对dotnet应用程序进行容器化。我们有一个要求,其中多个Pod可以访问相同的共享空间(永久卷)。它还应支持“ ReadWriteMany” AccessMode。我们探索了以下选项:

  1. 通过持久卷访问的GCE永久磁盘。(不支持ReadWriteMany。只有一个Pod可以访问该磁盘)。
  2. 网络文件共享(NFS)。 Windows节点池当前不支持。
  3. 文件存储适合解决方案,但价格昂贵且由Google管理。

我们正在寻找其他符合我们要求的选项。请帮忙。

2 个答案:

答案 0 :(得分:0)

您说对了,至少Windows尚不支持NFS,内置客户端v4尚不支持。因此,只要不支持NFS v4,Kubernetes团队就无法在k8s中启动这项工作。 source

在这种限制下,我只能看到Filestore.

答案 1 :(得分:0)

我一直在尝试解决相同的问题-从2个Windows Pod(IIS +控制台应用程序上的ASP.NET应用程序)访问共享文件系统。我无法使用文件存储,因为它需要NFSClient(Install-WindowsFeature NFS-Client),并且由于需要重新启动计算机,所以无法将其安装到容器中(在容器构建或运行时),也许我丢失了在这里。

我找到的选项:

  1. 如果需要创建一个可以在单个VM上运行的简单临时演示应用程序,则可以在单个实例上运行两个Pod,创建一个永久磁盘,并使用gcloud compute instances attach-disk,RDP将其附加到实例实例中,装入磁盘并将磁盘作为hostPath提供给Pod。 那就是我现在正在使用的解决方案。

  2. 创建SMB共享(在单独的VM上或使用Docker容器https://hub.docker.com/r/dperson/samba/,并使用New-SmbMapping -LocalPath $shareletter -RemotePath $dhcpshare -Username $shareuser -Password $sharepasswd -Persistent $true从pod进行访问。此解决方案适用于我的控制台应用程序,但Web应用程序无法使用(即使我已将IIS上的应用程序池设置为作为本地系统运行)也无法访问文件。也可以使用New-SmbGlobalMapping从实例挂载SMB-flexvolume可以执行https://github.com/microsoft/K8s-Storage-Plugins/tree/master/flexvolume/windows我还没有探讨过该选项,但我认为它会有同样的问题(IIS无法看到文件)。

  3. 我认为最好的(最安全和可靠的)解决方案是在单独的VM上设置Active Directory域控制器和SMB共享,​​并使用gMSA向容器提供对其的访问:https://docs.microsoft.com/en-us/virtualization/windowscontainers/manage-containers/manage-serviceaccounts https://kubernetes.io/docs/tasks/configure-pod-container/configure-gmsa/ 但这似乎并不容易。