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.