Google Distributed Cloud (GDC) 實體隔離設備裝置可將任意資料傳輸至 Google Distributed Cloud 實體隔離環境,或從該環境傳輸資料。你可以手動啟動轉移作業,也可以設定在特定時間間隔自動執行。
轉移範例:
- 下載軟體更新或更新後的客戶工作負載
- 上傳顧客數位資料、裝置指標或裝置安全性、稽核和作業記錄
- 備份資料快照
儲存空間移轉工具會移轉資料,並發布在映像檔中,供叢集上執行的容器使用。
資料來源
儲存空間轉移工具可彈性調整 GDC 氣隙隔離裝置的運作條件。與 S3 相容的 API 可存取外部公開和內部儲存空間目標。這項工具也支援本機檔案系統和 Cloud Storage 來源。
營運商有責任控管存取金鑰,以及將 GDC 無網路連線裝置連線至外部網路時,所需的任何其他憑證、祕密或機密資料。作業人員也負責設定外部網路。
如要建立及存取外部儲存空間,請參閱建立儲存空間值區。
本機儲存空間
本機儲存空間位於 Pod 的容器環境中,包括暫時性檔案系統或已掛接的磁碟區。掛接磁碟區時,繫結至 Pod 的 ServiceAccount 必須有權存取所有掛接目標。
S3 儲存空間
您可透過 S3 相容 API 存取網路可用儲存空間。服務可以對外開放,也可以只在叢集網路內公開。您必須提供可存取的網址,以及透過 Kubernetes Secret 掛接的標準化憑證。
透過 S3 API 存取多節點和物件儲存空間定義的資料。如要設定 GDC 氣隙式裝置中的多節點儲存空間和物件儲存空間,請參閱相關章節。
雲端儲存空間
您必須提供可存取的網址,以及透過 Secret 掛載的標準化憑證。
如果存取具有統一存取權控管的 Cloud Storage 值區,則必須將 --bucket-policy-only
旗標設為 true
。
憑證
如要使用儲存空間移轉服務,定義 S3 或 GCS 來源或目的地,必須提供 Kubernetes Secret。這些憑證可透過遠端服務帳戶或使用者帳戶提供。
在 Job 或 CronJob 定義中使用密鑰時,JobSpec 必須附加至可存取密鑰的 Kubernetes ServiceAccount。
建立移轉作業使用的 ServiceAccount,然後使用角色和角色繫結,將讀取及寫入密鑰的權限新增至 ServiceAccount。如果預設命名空間 ServiceAccount 或自訂 ServiceAccount 已具備權限,您可以選擇不建立 ServiceAccount。
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
遠端服務帳戶
如要取得 Cloud Storage 服務帳戶憑證來進行移轉,請參閱 https://developers.google.com/workspace/guides/create-credentials#create_credentials_for_a_service_account。這些憑證必須儲存在 service-account-key
欄位的密碼中。
範例如下:
apiVersion: v1
data:
service-account-key: BASE_64_ENCODED_VERSION_OF_CREDENTIAL_FILE_CONTENTS
kind: Secret
metadata:
name: gcs-secret
namespace: NAMESPACE
type: Opaque
使用者帳戶
您可以使用使用者帳戶向 S3 相容值區 (而非 Cloud Storage 值區) 進行驗證。您必須將 --src_type
或 --dst_type
引數指定為 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
更改下列內容:
NAMESPACE
:您要在其中建立 Job 定義的命名空間名稱。SECRET_NAME
:您要建立的 Secret 名稱。ACCESS_KEY_ID
: Google Cloud 控制台「存取金鑰」欄位中的值。設定 Object Storage 時,這稱為 access-key-id。ACCESS_KEY
: Google Cloud 控制台「Secret」(密鑰) 欄位中的值。設定 Object Storage 時,這是 secret-key 或 Secret。
憑證
在工作中提供驗證憑證,並使用包含 ca.crt
資料金鑰的 Kubernetes 密鑰。
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.
您可以透過 NAMESPACE/SECRET_NAME
格式中的 src_ca_certificate_reference
和 dst_ca_certificate_reference
引數,參照工具提供憑證。例如:
...
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
如果是設備中的 S3 儲存空間,可以直接使用 trust-store-root-ext
密碼做為 CA 憑證。例如:
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
選用:定義 LoggingTarget,在 Loki 中查看記錄
根據預設,只有在 Kubernetes 資源中才能查看 Job 的記錄,且無法在可觀測性堆疊中查看,必須使用 LoggingTarget 進行設定才能查看。
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
定義內建工作
使用者可管理自己的 Job 資源。如要進行一次性資料轉移,請定義 Job。Job 會建立 Pod,執行 storage-transfer 容器。
工作範例:
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
定義內建 CronJob
使用者可管理自行定義的 CronJob 資源。使用內建的 CronJob 可定期排定資料移轉作業。
以下是可自動轉移資料的 CronJob 範例:
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 建議將 concurrencyPolicy
設為 Forbid
,避免資料爭用。
CronJob、Secret 和 PersistentVolumeClaim 必須位於相同命名空間。
決定資料工作的優先順序
設定資料工作優先順序的方法有很多種,而且互不衝突。您可以在 CronJob 定義中設定較不頻繁的工作時間表。
您也可以使用 InitContainers (https://kubernetes.io/docs/concepts/workloads/pods/init-containers/) 排序工作,這些容器一律會依定義順序執行。不過,所有容器都必須順利執行。使用 InitContainers 可優先處理某項工作,或定義兩個以上的 InitContainers,並使用鏡像來源和目的地定義,管理資料爭用情形。
以下是可實現有序資料轉移的 jobTemplate
範例:
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
容器 A-to-B
會在 B-to-A
之前執行。這個範例同時達成雙向同步和工作排序。