You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Kubernetes/Azure环境中通过SSH挂载文件夹?

在Azure Kubernetes环境中实现远程目录挂载的方案

针对你在本地Docker中用SSHFS挂载远程目录的需求,以下是在Azure Kubernetes(AKS)中的生产可用实现方案,以及SSHFS的替代方案:

一、类似SSHFS的挂载实现(生产可用,无需实验性CSI驱动)

如果想沿用SSHFS的逻辑,又不想用实验阶段的csi-sshfs,可以通过Sidecar容器挂载+emptyDir共享的方式实现,直接写入Deployment YAML即可:

Deployment YAML示例

apiVersion: apps/v1
kind: Deployment
metadata:
  name: remote-dir-demo
spec:
  replicas: 1
  selector:
    matchLabels:
      app: remote-dir-demo
  template:
    metadata:
      labels:
        app: remote-dir-demo
    spec:
      volumes:
      - name: shared-storage
        emptyDir: {} # 用于在业务容器和Sidecar之间共享挂载的目录
      containers:
      # 你的业务容器
      - name: my-app
        image: my_image
        volumeMounts:
        - name: shared-storage
          mountPath: /location_in_container # 容器内的挂载路径
      # SSHFS挂载Sidecar
      - name: sshfs-mounter
        image: vieux/sshfs:latest
        command: ["sh", "-c"]
        args:
        - >
          sshfs [远程服务器用户]@[远程服务器IP]:/location_on_server /mnt/shared
          -o password=[远程服务器密码] -o allow_other && tail -f /dev/null
        volumeMounts:
        - name: shared-storage
          mountPath: /mnt/shared # Sidecar内的挂载路径,与emptyDir绑定
        securityContext:
          # 替代全特权模式,仅添加必要的权限
          capabilities:
            add: ["SYS_ADMIN", "DAC_READ_SEARCH"]
          privileged: false

关键注意事项

  • 绝对不要硬编码密码,把密码存入Kubernetes Secret,通过环境变量或volume挂载读取:
    # 先创建Secret
    kubectl create secret generic ssh-creds --from-literal=ssh-password=[你的密码]
    # 在Sidecar中引用
    env:
    - name: SSH_PASSWORD
      valueFrom:
        secretKeyRef:
          name: ssh-creds
          key: ssh-password
    # 然后在args中替换为 $SSH_PASSWORD
    
  • 确保AKS集群节点能访问远程Linux服务器的SSH端口(22),必要时配置防火墙规则

二、不使用SSHFS的替代方案(文件保留在原远程服务器)

如果出于性能、安全或稳定性考虑不建议用SSHFS,以下是最简单的两种方案:

1. 将远程服务器配置为NFS服务器

把原远程Linux服务器的目标目录共享为NFS,然后通过AKS的原生NFS支持挂载:

  • 步骤:
    1. 在远程Linux服务器上安装NFS服务,编辑/etc/exports添加共享规则,允许AKS集群节点的IP段访问
    2. 在AKS中创建NFS类型的PersistentVolume(PV):
      apiVersion: v1
      kind: PersistentVolume
      metadata:
        name: remote-nfs-pv
      spec:
        capacity:
          storage: 10Gi # 仅为标识,实际容量由远程服务器决定
        accessModes:
          - ReadWriteMany
        nfs:
          server: [远程服务器IP]
          path: /location_on_server
      
    3. 创建PersistentVolumeClaim(PVC)绑定该PV,再在Deployment中挂载PVC到容器目录

2. 用Azure File Sync同步到Azure Files

结合Azure生态,将远程Linux服务器的目录同步到Azure Files,再通过AKS的Azure Files CSI驱动挂载:

  • 步骤:
    1. 在Azure中创建存储账户和文件共享
    2. 在远程Linux服务器上安装Azure File Sync代理,配置同步组,将/location_on_server同步到Azure Files
    3. 在AKS中直接创建Azure Files类型的PVC,挂载到容器(AKS默认已集成Azure Files CSI驱动)

三、关于Deployment YAML的说明

不管采用哪种方案,都需要在Deployment YAML中定义卷和挂载规则:

  • 所有卷配置在spec.template.spec.volumes下
  • 容器的挂载规则定义在volumeMounts字段中
  • 敏感信息必须用Kubernetes Secret、ConfigMap等方式存储,禁止硬编码在YAML文件内

内容的提问来源于stack exchange,提问作者gontarczuk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 08:33:24