首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用安装带有秘密的卷

使用安装带有秘密的卷
EN

Stack Overflow用户
提问于 2021-09-15 13:07:55
回答 1查看 798关注 0票数 0

我正在用KubernetesPodOperator写一个气流数据采集卡。在容器中运行的Python进程必须使用敏感数据打开文件:

代码语言:javascript
复制
with open('credentials/jira_credentials.json', 'r') as f:
    creds = json.load(f)

必须对CloudStorage客户端进行身份验证:

代码语言:javascript
复制
os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = "credentials/cloud_storage_credentials.json"

根据最佳安全实践,我不使用敏感数据来打包容器的映像。相反,我使用库伯奈特斯秘密。使用用于Kubernetes的Python API,我试图将它们挂载为卷,但没有成功。容器中存在credentials/目录,但它是空的。如何使容器中的文件jira_crendentials.json和cloud_storage_credentials.json可访问?

我的DAG代码:

代码语言:javascript
复制
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': ['airflow@example.com'],
    '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",
                          secret="jira-user-secret",
                          key="jira_credentials.json")
secret_storage_credentials = Secret(deploy_type="volume",
                                    deploy_target="/credentials",
                                    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': '2021-01-02T03:04:05'}, 
                                )

start >> passing
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-09-15 14:35:14

根据示例,Secret是一个特殊的类,它将自动处理创建卷挂载。查看您的代码,似乎您自己使用挂载/credentials的卷正在覆盖Secret创建的/credentials挂载,而且由于您提供了空的configs={},所以这个挂载也是空的。

尝试只提供secrets=[secret_jira_user,secret_storage_credentials]并删除手动volume_mounts

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69193793

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档