Airflow 与 Kerberos 的集成如何工作?

Posted

技术标签:

【中文标题】Airflow 与 Kerberos 的集成如何工作?【英文标题】:How does Airflow integration with Kerberos work? 【发布时间】:2021-05-26 07:38:44 【问题描述】:

我们正在使用具有以下设置的 Airflow 2.0.1:

celery 执行器和 4 个节点上的 4 个工作器。 我们的大部分任务都运行一些通过 BashOperator 启动的 Hadoop 应用程序 使用模拟 仅使用默认队列

首先,我们设置了一个自己的作业来更新 run_as_user 用户的 Kerberos 票证。大约一周后它运行良好,然后一名工人开始因丢失 Kerberos 票而失败。我们找不到上次成功运行和失败作业之间的任何变化;节点上有有效票证;所以我们阻止了工人。第二天,我们完全重新启动了 Airflow,所有工作人员都报告了缺少 Kerberos 票证。暂时,当 kinit 在 DAG 中运行并根据https://airflow.apache.org/docs/apache-airflow/2.0.1/security/kerberos.html?highlight=kerberos 启用 Kerberos 时,我们可以使用一名工作人员运行作业。

问题是

如果有人可以更详细地描述 Airflow 与 Kerberos 的集成是如何工作的 为什么当我们通过 BashOperator 启动应用程序时看不到从命令行使用的票证

【问题讨论】:

好像有源代码,玩得开心...github.com/apache/airflow/blob/master/airflow/security/… 从“Kerberos 更新程序”发布 日志 是个好主意。或者提到缺少日志,这将是一个有趣的事实(日志模式在源代码中......) 我明白了..我对此很陌生,因此我只问了这样一个一般性问题...同时尝试了解更多信息。我正在研究代码,我不确定airflow.apache.org/docs/apache-airflow/2.0.1/security/… 的设置是否与 BashOperator 相关?在我看来,它们仅用于 Hive 和 Hdfs 挂钩,对吗? 嗯,所以在测试集群上玩,设置会影响 BashOperator 根据文档启用 Kerberos 后,它可以工作,只是似乎缓存在气流 kerberos 中由 kinit 生成时获得的访问权限太少。我们得到了 org.apache.hadoop.security.AccessControlException: Client cannot authenticate via:[TOKEN, KERBEROS] 当缓存的权限得到增强时,它起作用了。 【参考方案1】:

感谢 cmets。我做了一些测试,并认为现在更好地理解发生在我们身上的事情:

从 BashOperator 访问 hdfs 开始因 Kerberos 错误而失败,我认为我必须根据 https://airflow.apache.org/docs/apache-airflow/2.0.1/security/kerberos.html?highlight=kerberos 设置配置。在测试它时,工作人员试图通过在airflow.cfg 中配置并由airflow kerberos 创建的run_as_user 用户票证缓存文件读取它并没有权限...

因此,我正在检查票在生产中的存储位置,它们位于运行 Airflow 工作程序的服务的 /tmp 中。我的意思是由 kinit 创建的票证在 DAG 中的 BashOperators 中运行,但是我们更新票证的脚本确实 ssh 到运行 Airflow 工作程序的所有节点,因此票证存储在常规服务器 /tmp 中。

失败是在我们在服务中启动 Airflow 几天后开始的。我们仍然有很多直接在 DAG 中的 kinit(因为这是我们之前使用的方式,因为之前我们使用了队列)。通过在没有队列的多个节点上启动工作人员,我们还设置了更新票证的脚本(执行 ssh ...),以确保票证在所有节点上更新。我认为 Kerberos 问题是在服务重新启动后发生的,因为 DAG 中由 kinit 创建的票证已被删除。如果是这样的话,我们第一次启动服务时也会出现Kerberos问题,但我们还有其他问题,所以可能我们没有注意到。

【讨论】:

以上是关于Airflow 与 Kerberos 的集成如何工作?的主要内容,如果未能解决你的问题,请参考以下文章

Windows 集成 (NTLM) 身份验证与 Windows 集成 (Kerberos)

集成OpenLDAP与Kerberos实现统一认证:基于SASL/GSSAPI深度集成

集成OpenLDAP与Kerberos实现统一认证:基于SASL/GSSAPI深度集成

Apache Atlas 和 Airflow 集成

使用 Airflow 进行集成测试

集成OpenLDAP与Kerberos实现统一认证:整合后台数据库