我正在使用KubernetesPodOperator撰寫一個Airflow DAG。在容器中運行的一個Python行程必須打開一個帶有敏感資料的檔案:
with open('cerentials/jira_credentials. json', 'r') as f.
creds = json.load(f)
而CloudStorage的客戶端必須經過認證:
os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = "credentials/cloud_storage_credentials.json"
根據最佳安全實踐,我不會將容器的鏡像與敏感資料打包。相反,我使用Kubernetes Secrets。使用Python API for Kubernetes,我試圖將它們裝載為一個卷,但沒有成功。容器中存在credentials/目錄,但它是空的。我應該怎樣做才能使檔案jira_crendentials.json和cloud_storage_credentials.json在容器中被訪問?
我的DAG的代碼:
from airflow import DAG
from datetime import datetime,timedelta
from airflow.contrib.operators.kubernetes_pod_operator import KubernetesPodOperator
from airflow.kubernetes.secret import Secret
from airflow.kubernetes.volume import Volume
from airflow.kubernetes.volume_mount import VolumeMount
from airflow.operators.dummy_operator import DummyOperator
from kubernetes.client import models as k8s
default_args = {
'owner': 'airflow',
' depends_on_past': False。
'start_date': datetime.utcnow(),
'email': ['[email protected]']。
'email_on_failure': False,
'email_on_retry': False,
'retry_delay': timedelta(minutes=5)
}
volume = Volume(name="volume-credentials", configs={})
volume_mnt = VolumeMount(mount_path="/credentials", name="volume-credentials", sub_path=", read_only=True)
secret_jira_user = Secret(deploy_type="volume",
deploy_target="/credentials"/span>,
secret="jira-user-secret"。
key="jira_credentials.json")
secret_storage_credentials = Secret(deploy_type="volume",
deploy_target="/credentials"/span>,
secret="jira-trans-projects-cloud-storage-creds"。
key=" cloud_storage_credentials.json")
dag = DAG(
dag_id="jira_translations_project"。
schedule_interval="0 1 * * MON"。
start_date=datetime(2021, 9, 5, 0, 0, 0)。)
max_active_runs=1。
default_args=default_args
)
start = DummyOperator(task_id='START', dag=dag)
passing = KubernetesPodOperator(namespace='default',
image="eu.gcr.io/data-engineering/jira_downloader:v0.18" 。
cmds=["/usr/local/bin/run_process.sh"] 。
name="jira-translation-projects-01"。
task_id="jira-translation-projects-01"。
get_logs=True。
dag=dag,
volumes=[volume]。
volume_mounts=[volume_mnt]。
secrets=[
secret_jira_user,
secret_storage_credentials]。
env_vars={'MIGRATION_DATETIME'/span>: '2021-01-02T03:04:05'},
)
開始 >> 通過
uj5u.com熱心網友回復:
根據這個例子,Secret是一個特殊的類,將自動處理創建卷掛載。看看你的代碼,似乎你自己的卷與掛載/credentials是覆寫/credentials掛載由Secret創建的,并且因為你提供空的configs={},該掛載也是空的。
嘗試只提供 secrets=[secret_jira_user,secret_storage_credentials] 并洗掉手動 volume_mounts。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/319487.html
標籤:
