Menggunakan sistem file jaringan CIFS/SMB

Halaman ini menjelaskan penggunaan sistem file jaringan CIFS/SMB dengan Cloud Run.

Jika Anda menggunakan NFS, Filestore, atau Cloud Storage FUSE di Cloud Run, lihat halaman berikut:

Batasan

  • Anda harus menentukan lingkungan eksekusi generasi kedua saat menggunakan smbnetfs.

  • Karena batasan lingkungan eksekusi Cloud Run, CIFS/SMB tidak dapat dipasang secara langsung di dalam Cloud Run. Namun, Anda dapat menggunakan klien SMB yang tidak mengandalkan pemasangan kernel, seperti smbnetfs (berbasis FUSE) atau smbclient.

  • Cloud Run dirancang untuk diskalakan dengan cepat ke jumlah instance yang sangat banyak. Namun, sebagian besar sistem file jaringan tidak didesain untuk digunakan serentak oleh klien dalam jumlah besar. Untuk layanan Cloud Run, pertimbangkan untuk menggunakan fitur instance maksimum untuk membatasi jumlah instance Cloud Run.

Menggunakan smbnetfs

smbnetfs adalah sistem file berbasis FUSE yang memungkinkan Anda memasang berbagi SMB sebagai bagian dari hierarki sistem file lokal.

Untuk menggunakan smbnetfs dengan Cloud Run, perbarui Dockerfile Anda untuk menginstal smbnetfs dan dependensinya, serta mengonfigurasi kredensial.

Konfigurasi smbnetfs di Dockerfile

Tambahkan petunjuk berikut ke Dockerfile Anda:

# Install smbnetfs, fuse and other dependencies
RUN apt-get update && apt-get install -y smbnetfs fuse && rm -rf /var/lib/apt/lists/*

# Setup smbnetfs configuration
RUN mkdir -p ~/.smb
# Check if files exist before copying, as strict locations might vary or be missing in minimal images
RUN [ -f /etc/smbnetfs.conf ] && cp /etc/smbnetfs.conf ~/.smb/ || echo "smbnetfs.conf not found"

# Create the auth file
# In production, use mechanisms like [Secret Manager](/run/docs/configuring/services/secrets) to handle credentials
# securely instead of placing them directly in the Dockerfile.
RUN echo 'auth "<smb-server-ip>" "<smb-username>" "<smb-password>"' > ~/.smb/smbnetfs.auth
RUN chmod 600 ~/.smb/smbnetfs.auth

# Create the host file
RUN echo 'host <smb-server-ip> visible=true' > ~/.smb/smbnetfs.host
RUN chmod 600 ~/.smb/smbnetfs.host

# Enable the includes in the main config if they exist
RUN if [ -f ~/.smb/smbnetfs.conf ]; then \
    sed -i 's/^#include "smbnetfs.auth"/include "smbnetfs.auth"/' ~/.smb/smbnetfs.conf && \
    sed -i 's/^#include "smbnetfs.host"/include "smbnetfs.host"/' ~/.smb/smbnetfs.conf; \
    fi

Ganti <smb-server-ip>, <smb-username>, dan <smb-password> dengan detail koneksi untuk server SMB Anda.

Pasang berbagi SMB selama startup penampung

Jalankan smbnetfs untuk memasang share saat container Anda dimulai dan sebelum aplikasi Anda dimulai. Jika container Anda berjalan sebagai pengguna non-root, Anda mungkin perlu menyesuaikan izin atau konfigurasi FUSE.

  1. Buat titik pemasangan seperti /mnt/smb seperti yang ditunjukkan pada perintah berikut:

    mkdir /mnt/smb

  2. Pasang sistem file SMB menggunakan perintah smbnetfs:

    smbnetfs /mnt/smb

  3. Akses bagian yang dibagikan di bagian /mnt/smb/<smb-server-ip>/<share-name>, seperti yang ditunjukkan dalam perintah berikut:

    ls /mnt/smb/smb-server-ip/share-name

Pemecahan masalah

Anda mungkin mengalami error input/output saat menulis ke file menggunakan flag O_APPEND dengan smbnetfs. Temukan detail selengkapnya dalam diskusi Stack Overflow.

Menggunakan smbclient

smbclient adalah alat command line yang menyediakan antarmuka seperti FTP untuk mengakses berbagi SMB. Anda dapat menggunakannya untuk mentransfer file atau menjalankan perintah di server SMB.

  • Untuk menghindari pemberian kredensial dengan setiap perintah, Anda dapat menyimpannya dalam file.

    1. Simpan kredensial Anda dalam file, misalnya, smb-cred.txt:

      username = <smb-username>
      password = <smb-password>
      
    2. Sebagai alternatif untuk file kredensial, Anda dapat memberikan kredensial dengan setiap perintah menggunakan opsi -U atau --user, misalnya: --user=[DOMAIN\]USERNAME[%PASSWORD].

    3. Gunakan alat smbclient dengan flag -A untuk menentukan file kredensial. Misalnya, untuk mencantumkan file dalam berbagi, jalankan perintah berikut:

      smbclient //smb-server-ip/share-name -A smb-cred.txt -c 'ls'

  • Untuk mengubah file dengan alat smbclient, download file, ubah secara lokal, lalu upload kembali ke share seperti yang ditunjukkan dalam langkah-langkah berikut.

    1. Download file dengan menjalankan perintah get:

      smbclient //smb-server-ip/share-name -A smb-cred.txt -c 'get remote local'

    2. Ubah file Anda secara lokal.

    3. Upload file setelah modifikasi dengan menjalankan perintah put:

      smbclient //smb-server-ip/share-name -A smb-cred.txt -c 'put local remote'

Saat Anda menggunakan alat smbclient, server SMB mengidentifikasi Anda menggunakan kredensial yang Anda berikan. Dengan demikian, server dapat menerapkan izin file yang benar. Untuk mengetahui daftar lengkap perintah smbclient, lihat dokumentasi smbclient resmi.