通过在kubernetes资源定义中定义秘钥的方式,可以传递秘钥到Pod中。要访问这些秘钥,在操作符中必须将秘钥名称传递给env_vars并将其设置为PodSpec中的环境变量。下面是一个简单的代码示例,演示如何在KubernetesPodOperator中访问传递给Pod的秘钥。
from kubernetes.client import models as k8s
secrets = [
k8s.V1Secret(
metadata=k8s.V1ObjectMeta(name='my-secret'),
data={'my-password': 'password123'}
)
]
secrets_volume = k8s.V1Volume(
name='my-secret',
secret=k8s.V1SecretVolumeSource(secret_name='my-secret')
)
volume_mounts = [
k8s.V1VolumeMount(
name='my-secret',
mount_path='/mnt/secrets',
read_only=True
)
]
env_vars = [
k8s.V1EnvVar(
name='MY_PASSWORD',
value_from=k8s.V1EnvVarSource(
secret_key_ref=k8s.V1SecretKeySelector(
key='my-password',
name='my-secret'
)
)
)
]
operator = KubernetesPodOperator(
task_id='my-task',
name='my-pod',
image='my-image',
secrets=secrets,
env_vars=env_vars,
volume_mounts=volume_mounts,
volumes=[secrets_volume]
)
在上面的示例中,将传递名为'my-secret”的秘钥,其中包含一个名为'my-password”的密钥和相应的值。然后,为Pod定义了一个名为'my-secret”的卷,并将其挂载到'/mnt/secrets”目录中,并将其设置为只读。在env_vars中设置了一个环境变量,名称为'MY_PASSWORD”,并使用'my-secret”和'my-password”作为秘钥的名称和密钥的名称来从Pod中读取它的值。
在Pod中,可以使用以下方式访问此环境变量。
import os
my_password = os.environ['MY_PASSWORD']
print(my_password)