Apache Airflow的KubernetesPodOperator
如何从私有存储库中提取docker映像?
KubernetesPodOperator
有一个image_pull_secrets
,您可以传递一个Secrets
对象以使用私有存储库进行身份验证。但是secrets对象只能代表一个环境变量或一个卷-都不符合我对Kubernetes如何使用私有证书进行身份验证的理解。
使用kubectl
可以使用
$ kubectl create secret docker-registry $SECRET_NAME \
--docker-server=https://${ACCOUNT}.dkr.ecr.${REGION}.amazonaws.com \
--docker-username=AWS \
--docker-password="${TOKEN}" \
--docker-email="${EMAIL}"
但是如何在Airflow中创建身份验证机密?
答案 0 :(得分:1)
根据kubernetes documentation,有secret
个类型为docker-registry
的对象,可用于向私有存储库进行身份验证。
您在问题中提到的;您可以使用kubectl
来创建类型为docker-registry
的秘密,然后尝试使用image_pull_secrets
进行传递。
但是,根据平台的不同,根据kubernetes documentation,您正在使用此功能受限或完全不使用:
配置节点以对私有注册表进行身份验证
注意:如果您在Google Kubernetes Engine上运行,则每个节点上已经存在一个
.dockercfg
,具有用于Google Container Registry的凭据。您不能使用这种方法。注意::如果您在AWS EC2上运行并且正在使用EC2容器注册表(ECR),则每个节点上的kubelet将管理和更新ECR登录凭证。您不能使用这种方法。
注意:如果可以控制节点配置,则此方法适用。它不能在GCE以及任何其他执行自动节点替换的云提供商上可靠运行。
注意:到目前为止,Kubernetes仅支持docker config的
auths
和HttpHeaders
部分。这意味着不支持凭据助手(credHelpers
或credsStore
)。
可以在提到的平台上进行此工作,但需要自动脚本和第三方工具。
就像Amazon ECR示例一样:Amazon ECR Docker Credential Helper需要定期将AWS凭证拉到docker注册表配置中,然后使用另一个脚本来更新kubernetes docker-registry机密。
至于Airflow本身,我认为它没有创建自己的docker-repository机密的功能。 您可以在Apache Airflow JIRA中请求类似的功能。
P.S。
如果您的K8s群集仍然存在问题,则可能需要在堆栈上创建新问题以解决这些问题。