Доступ к секрету Kubernetes из Airflow KubernetesPodOperator

#kubernetes #airflow #google-cloud-composer

#kubernetes #воздушный поток #google-cloud-композитор

Вопрос:

Я настраиваю среду Airflow в Google Cloud Composer для тестирования. Я добавил несколько секретов в свое пространство имен, и они отображаются нормально:

 $ kubectl describe secrets/eric-env-vars
Name:         eric-env-vars
Namespace:    eric-dev
Labels:       <none>
Annotations:  <none>

Type:  Opaque

Data
====
VERSION_NUMBER:  6 bytes
  

Я ссылался на этот секрет в своем файле определения базы данных (для краткости опустив некоторый код):

 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],
)
  

Но когда я запускаю эту базу данных, VERSION_NUMBER переменная env не распечатывается. Не похоже, что он также должным образом связан с pod (прошу прощения за неточный язык, я новичок как в Kubernetes, так и в Airflow). Это взято из журнала задач Airflow в ответе на создание модуля (также отформатирован для краткости / удобочитаемости):

 '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 неправильного, но я не совсем уверен. Руководство приветствуется!

Комментарии:

1. Попадает ли значение, которое вы ожидаете в VERSION_NUMBER , по крайней мере, в BASE_IMAGE_VERSION ?

2. @hexacyanide Да, это та же переменная, я просто допустил ошибку при редактировании журналов и операторов. Исправляем это сейчас.

Ответ №1:

Оказывается, это было неправильное представление журналов!

При предоставлении переменной среды модулю Kubernetes через Секрет, этот value ключ в ответе API является None ключом, потому что значение поступает из secret_key_ref .

Комментарии:

1. Означает ли это, что ваша переменная среды была правильно передана в ваш контейнер Ubuntu? Если нет, нужно ли было что-то менять, чтобы это заработало?