从 Airflow KubernetesPodOperator 访问 Kubernetes Secret
Accessing Kubernetes Secret from Airflow KubernetesPodOperator
我正在 Google Cloud Composer 上设置 Airflow 环境进行测试。我在我的命名空间中添加了一些秘密,它们显示正常:
$ kubectl describe secrets/eric-env-vars
Name: eric-env-vars
Namespace: eric-dev
Labels: <none>
Annotations: <none>
Type: Opaque
Data
====
VERSION_NUMBER: 6 bytes
我在我的 DAG 定义文件中引用了这个秘密(为简洁起见,省略了一些代码):
env_var_secret = Secret(
deploy_type='env',
deploy_target='VERSION_NUMBER',
secret='eric-env-vars',
key='VERSION_NUMBER',
)
dag = DAG('env_test', schedule_interval=None, start_date=start_date)
operator = KubernetesPodOperator(
name='k8s-env-var-test',
task_id='k8s-env-var-test',
dag=dag,
image='ubuntu:16.04',
cmds=['bash', '-cx'],
arguments=['env'],
config_file=os.environ['KUBECONFIG'],
namespace='eric-dev',
secrets=[env_var_secret],
)
但是当我 运行 这个 DAG 时,VERSION_NUMBER
env var 没有打印出来。它看起来也没有正确链接到 pod(为不精确的语言道歉,我是 Kubernetes 和 Airflow 的新手)。这是来自 pod 创建响应的 Airflow 任务日志(也格式化为 brevity/readability):
'env': [
{
'name': 'VERSION_NUMBER',
'value': None,
'value_from': {
'config_map_key_ref': None,
'field_ref': None,
'resource_field_ref': None,
'secret_key_ref': {
'key': 'VERSION_NUMBER',
'name': 'eric-env-vars',
'optional': None}
}
}
]
我假设我们以某种方式为 Secret
错误调用构造函数,但我不完全确定。指导表示赞赏!
原来这是对日志的误解!
当通过 Secret 向 Kubernetes pod 提供环境变量时,API 响应中的 value
键是 None
,因为该值来自 secret_key_ref
.
我正在 Google Cloud Composer 上设置 Airflow 环境进行测试。我在我的命名空间中添加了一些秘密,它们显示正常:
$ kubectl describe secrets/eric-env-vars
Name: eric-env-vars
Namespace: eric-dev
Labels: <none>
Annotations: <none>
Type: Opaque
Data
====
VERSION_NUMBER: 6 bytes
我在我的 DAG 定义文件中引用了这个秘密(为简洁起见,省略了一些代码):
env_var_secret = Secret(
deploy_type='env',
deploy_target='VERSION_NUMBER',
secret='eric-env-vars',
key='VERSION_NUMBER',
)
dag = DAG('env_test', schedule_interval=None, start_date=start_date)
operator = KubernetesPodOperator(
name='k8s-env-var-test',
task_id='k8s-env-var-test',
dag=dag,
image='ubuntu:16.04',
cmds=['bash', '-cx'],
arguments=['env'],
config_file=os.environ['KUBECONFIG'],
namespace='eric-dev',
secrets=[env_var_secret],
)
但是当我 运行 这个 DAG 时,VERSION_NUMBER
env var 没有打印出来。它看起来也没有正确链接到 pod(为不精确的语言道歉,我是 Kubernetes 和 Airflow 的新手)。这是来自 pod 创建响应的 Airflow 任务日志(也格式化为 brevity/readability):
'env': [
{
'name': 'VERSION_NUMBER',
'value': None,
'value_from': {
'config_map_key_ref': None,
'field_ref': None,
'resource_field_ref': None,
'secret_key_ref': {
'key': 'VERSION_NUMBER',
'name': 'eric-env-vars',
'optional': None}
}
}
]
我假设我们以某种方式为 Secret
错误调用构造函数,但我不完全确定。指导表示赞赏!
原来这是对日志的误解!
当通过 Secret 向 Kubernetes pod 提供环境变量时,API 响应中的 value
键是 None
,因为该值来自 secret_key_ref
.