Mentransfer data

Perangkat Google Distributed Cloud (GDC) dengan air gap mentransfer data arbitrer ke dan dari lingkungan Google Distributed Cloud dengan air gap. Transfer dapat dimulai secara manual atau disetel agar terjadi secara otomatis pada interval yang ditetapkan.

Contoh transfer:

  • Mendownload update software atau workload pelanggan yang diperbarui
  • Mengupload data pelanggan, metrik perangkat, atau log keamanan, audit, dan operasi perangkat
  • Snapshot data cadangan

Alat storage-transfer mentransfer data dan didistribusikan pada image untuk digunakan dalam menjalankan container di cluster.

Sumber data

Alat transfer penyimpanan memberikan fleksibilitas dengan kondisi operasi alat air gap GDC. API yang Kompatibel dengan S3 dapat mengakses target penyimpanan internal dan yang diekspos secara eksternal. Alat ini juga mendukung sistem file lokal dan sumber Cloud Storage.

Operator bertanggung jawab untuk menjaga kontrol kunci akses dan kredensial, rahasia, atau data sensitif lainnya yang diperlukan untuk autentikasi guna menghubungkan perangkat GDC yang terisolasi dari jaringan eksternal. Operator juga bertanggung jawab atas konfigurasi jaringan eksternal.

Lihat membuat bucket penyimpanan untuk membuat dan mengakses penyimpanan eksternal.

Penyimpanan lokal

Penyimpanan lokal terdapat di lingkungan penampung pod dan mencakup sistem file sementara atau volume yang terpasang. ServiceAccount yang terikat ke pod harus memiliki akses ke semua target pemasangan saat memasang volume.

Penyimpanan S3

Penyimpanan yang tersedia di jaringan dapat diakses melalui S3 Compatible API. Layanan dapat berupa eksternal atau hanya diekspos dalam jaringan cluster. Anda harus memberikan URL yang dapat diakses dan kredensial standar yang di-mount menggunakan Secret Kubernetes.

Data yang ditentukan penyimpanan objek dan multi-node diakses melalui S3 API. Lihat bagian yang relevan untuk menyiapkan penyimpanan multi-node dan penyimpanan objek dalam perangkat air-gap GDC.

Penyimpanan cloud

Anda harus memberikan URL yang dapat diakses dan kredensial standar yang di-mount menggunakan Secret.

Jika mengakses bucket Cloud Storage dengan kontrol akses seragam, Anda harus menetapkan tanda --bucket-policy-only ke true.

Kredensial

Secret Kubernetes diperlukan untuk menggunakan layanan storage-transfer untuk definisi sumber atau tujuan S3 atau GCS. Kredensial ini dapat diberikan dengan akun layanan jarak jauh atau akun pengguna.

Saat menggunakan Secret dalam definisi Job atau CronJob, JobSpec harus dilampirkan ke ServiceAccount Kubernetes yang memiliki akses ke Secret.

Buat ServiceAccount yang digunakan oleh transfer, lalu tambahkan izin ke ServiceAccount untuk membaca dan menulis rahasia menggunakan peran dan binding peran. Anda dapat memilih untuk tidak membuat ServiceAccount jika ServiceAccount default namespace atau ServiceAccount kustom Anda sudah memiliki izin.

  apiVersion: v1
  kind: ServiceAccount
  metadata:
    name: transfer-service-account
    namespace: NAMESPACE
  ---
  apiVersion: rbac.authorization.k8s.io/v1
  kind: Role
  metadata:
    name: read-secrets-role
    namespace: NAMESPACE
  rules:
  - apiGroups: [""]
    resources: ["secrets"]
    verbs: ["get", "watch", "list"]
  ---
  apiVersion: rbac.authorization.k8s.io/v1
  kind: RoleBinding
  metadata:
    name: read-secrets-rolebinding
    namespace: NAMESPACE
  subjects:
  - kind: ServiceAccount
    name: transfer-service-account
    namespace: NAMESPACE
    roleRef:
      kind: Role
      name: read-secrets-role
      apiGroup: rbac.authorization.k8s.io

Akun layanan jarak jauh

Untuk mendapatkan kredensial akun layanan Cloud Storage guna melakukan transfer, lihat https://developers.google.com/workspace/guides/create-credentials#create_credentials_for_a_service_account. Kredensial ini harus disimpan dalam rahasia di kolom service-account-key.

Berikut ini contohnya:

apiVersion: v1
data:
  service-account-key: BASE_64_ENCODED_VERSION_OF_CREDENTIAL_FILE_CONTENTS
kind: Secret
metadata:
  name: gcs-secret
  namespace: NAMESPACE
type: Opaque

Akun pengguna

Anda dapat menggunakan akun pengguna untuk autentikasi dengan bucket yang kompatibel dengan S3, bukan bucket Cloud Storage. Anda harus menentukan argumen --src_type atau --dst_type sebagai s3.

kubectl create secret -n NAMESPACE generic S3_CREDENTIAL_SECRET_NAME \
    --from-literal=access-key-id=ACCESS_KEY_ID
    --from-literal=access-key=ACCESS_KEY

Ganti kode berikut:

  • NAMESPACE: nama namespace tempat Anda akan membuat definisi Job.
  • SECRET_NAME: nama Secret yang Anda buat.
  • ACCESS_KEY_ID: nilai yang ditemukan di kolom Kunci Akses di konsol Google Cloud . Saat mengonfigurasi untuk Object Storage, ini disebut access-key-id.
  • ACCESS_KEY: nilai yang ditemukan di kolom Secret di konsol Google Cloud . Saat mengonfigurasi Object Storage, ini adalah secret-key atau Secret.

Sertifikat

Berikan sertifikat untuk validasi dalam tugas dengan Secret Kubernetes yang berisi kunci data ca.crt.

  apiVersion: v1
  kind: Secret
  metadata:
    name: SRC_CERTIFICATE_SECRET_NAME
    namespace: NAMESPACE
  data:
    ca.crt : BASE_64_ENCODED_SOURCE_CERTIFICATE
  ---
  apiVersion: v1
  kind: Secret
  metadata:
    name: DST_CERTIFICATE_SECRET_NAME
    namespace: NAMESPACE
  data:
    ca.crt : BASE_64_ENCODED_DESTINATION_CERTIFICATE # Can be same OR different than source certificate.

Sertifikat dapat diberikan dengan merujuk ke alat menggunakan argumen src_ca_certificate_reference dan dst_ca_certificate_reference dalam format NAMESPACE/SECRET_NAME. Contoh:

...
      containers:
      - name: storage-transfer-pod
        image: gcr.io/private-cloud-staging/storage-transfer:latest
        command:
        - /storage-transfer
        args:
        ...
        - --src_ca_certificate_reference=NAMESPACE/SRC_CERTIFICATE_SECRET_NAME
        - --dst_ca_certificate_reference=NAMESPACE/DST_CERTIFICATE_SECRET_NAME

Untuk penyimpanan S3 di appliance, Anda dapat langsung menggunakan secret trust-store-root-ext sebagai sertifikat CA. Contoh:

containers:
      - name: storage-transfer-pod
        image: gcr.io/private-cloud-staging/storage-transfer:latest
        command:
        - /storage-transfer
        args:
        - --src_type=s3
        - --src_ca_certificate_reference=NAMESPACE/trust-store-root-ext

Opsional: Tentukan LoggingTarget untuk melihat log di Loki

Secara default, log dari Job hanya dapat dilihat di resource Kubernetes dan tidak tersedia di stack kemampuan pengamatan dan harus dikonfigurasi dengan LoggingTarget agar dapat dilihat.

  apiVersion: logging.gdc.goog/v1alpha1
  kind: LoggingTarget
  metadata:
    namespace: NAMESPACE # Same namespace as your transfer job
    name: logtarg1
  spec:
    # Choose matching pattern that identifies pods for this job
    # Optional
    # Relationship between different selectors: AND
    selector:

      # Choose pod name prefix(es) to consider for this job
      # Observability platform will scrape all pods
      # where names start with specified prefix(es)
      # Should contain [a-z0-9-] characters only
      # Relationship between different list elements: OR
      matchPodNames:
        - data-transfer-job # Choose the prefix here that matches your transfer job name
    serviceName: transfer-service

Menentukan Tugas bawaan

Pengguna mengelola resource Job mereka sendiri. Untuk transfer data sekali pakai, tentukan Job. Job membuat Pod untuk menjalankan container storage-transfer.

Contoh Tugas:

apiVersion: batch/v1
kind: Job
metadata:
  name: data-transfer-job
  namespace: NAMESPACE
spec:
  template:
    spec:
      restartPolicy: Never
      serviceAccountName: transfer-service-account,
      containers:
      - name: storage-transfer-pod
        image: gcr.io/private-cloud-staging/storage-transfer:latest
        command:
        - /storage-transfer
        args:
        - --src_path=/src
        - --src_type=local
        - --dst_endpoint=https://your-dst-endpoint.com
        - --dst_credentials=NAMESPACE/CREDENTIAL_SECRET_NAME
        - --dst_path=/FULLY_QUALIFIED_BUCKET_NAME/BUCKET_PATH
        - --dst_type=gcs
        - --bucket_policy_only=true
        - --bandwidth_limit=10M #Optional of the form '10K', '100M', '1G' bytes per second
        volumeMounts:
        - mountPath: /src
          name: data
      volumes:
      - name: data
        persistentVolumeClaim:
          claimName: data-transfer-source

Menentukan CronJob bawaan

Pengguna mengelola resource CronJob yang ditentukan sendiri. Menggunakan CronJob bawaan memungkinkan transfer data terjadwal secara rutin.

Contoh CronJob yang mencapai transfer data otomatis:

apiVersion: batch/v1
kind: CronJob
metadata:
  name: data-transfer-cronjob
  namespace: NAMESPACE
spec:
  schedule: "* * * * *"
  concurrencyPolicy: Forbid
  jobTemplate:
    spec:
      template:
        spec:
          serviceAccountName: transfer-service-account
          containers:
          - name: storage-transfer-pod
            image: gcr.io/private-cloud-staging/storage-transfer:latest
            command:
            - /storage-transfer
            args:
            - --src_path=LOCAL_PATH
            - --src_type=local
            - --dst_endpoint=https://your-dst-endpoint.com
            - --dst_credentials=NAMESPACE/CREDENTIAL_SECRET_NAME
            - --dst_path=/FULLY_QUALIFIED_BUCKET_NAME/BUCKET_PATH
            - --dst_type=gcs
            - --bucket_policy_only=true
            volumeMounts:
            - mountPath: LOCAL_PATH
              name: source
          restartPolicy: Never
          volumes:
          - name: source
            persistentVolumeClaim:
              claimName: data-transfer-source

Google merekomendasikan agar concurrencyPolicy disetel ke Forbid untuk mencegah pertentangan data. CronJob, Secret, dan PersistentVolumeClaim harus berada di namespace yang sama.

Memprioritaskan tugas data

Penetapan prioritas pada tugas data dapat dilakukan dengan sejumlah cara yang tidak eksklusif satu sama lain. Anda dapat menetapkan jadwal tugas yang lebih jarang dalam definisi CronJob.

Tugas juga dapat diurutkan menggunakan InitContainers (https://kubernetes.io/docs/concepts/workloads/pods/init-containers/) yang selalu berjalan sesuai urutan definisi. Namun, semua penampung harus berjalan dengan berhasil. Gunakan InitContainers untuk memberikan prioritas yang lebih tinggi pada satu tugas, atau mengelola pertentangan data dengan menentukan dua atau lebih InitContainers dengan definisi sumber dan tujuan yang sama.

Contoh jobTemplate yang mencapai transfer data yang diurutkan:

apiVersion: batch/v1
kind: CronJob
metadata:
  name: ordered-data-transfer-cronjob
  namespace: NAMESPACE
spec:
  schedule: "* * * * *"
  concurrencyPolicy: Forbid
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: job-complete
            image: whalesay
            command: ["sh", "-c", "echo Job Completed."]
          initContainers:
          - name: A-to-B
            image: gcr.io/private-cloud-staging/storage-transfer:latest
            command: [/storage-transfer]
            args:
            - --src_type=s3
            - --src_endpoint=ENDPOINT_A
            - --src_path=/example-bucket
            - --src_credentials=NAMESPACE/CREDENTIAL_SECRET_NAME
            - --src_ca_certificate_reference=NAMESPACE/SRC_CERTIFICATE_SECRET_NAME
            - --dst_type=s3
            - --dst_endpoint=ENDPOINT_B
            - --dst_credentials=NAMESPACE/CREDENTIAL_SECRET_NAME
            - --dst_ca_certificate_reference=NAMESPACE/DST_CERTIFICATE_SECRET_NAME
            - --dst_path=/example-bucket
          - name: B-to-A
            image: gcr.io/private-cloud-staging/storage-transfer:latest
            command: [/storage-transfer]
            args:
            - --src_type=s3
            - --src_endpoint=ENDPOINT_B
            - --src_credentials=NAMESPACE/CREDENTIAL_SECRET_NAME
            - --src_ca_certificate_reference=NAMESPACE/SRC_CERTIFICATE_SECRET_NAME
            - --src_path=/example-bucket
            - --dst_type=s3
            - --dst_endpoint=ENDPOINT_A
            - --dst_credentials=NAMESPACE/CREDENTIAL_SECRET_NAME
            - --dst_ca_certificate_reference=NAMESPACE/DST_CERTIFICATE_SECRET_NAME
            - --dst_path=/example-bucket

Container A-to-B berjalan sebelum B-to-A. Contoh ini mencapai bisync dan pengurutan tugas.