Airflow 与Kerberos的集成是如何工作的?

Airflow 与Kerberos的集成是如何工作的?,airflow,kerberos,Airflow,Kerberos,我们使用的气流2.0.1具有以下设置: 芹菜执行器和4个节点上的4个工人 我们的大多数任务运行一些通过BashOperator启动的Hadoop应用程序 使用模拟 仅使用默认队列 首先,我们设置了一个自己的作业来更新run_as_用户的Kerberos票据。在大约一周的时间里,它工作正常,然后其中一名工作人员开始因丢失Kerberos票证而失败。我们找不到上次成功运行和失败作业之间的任何更改;节点上存在有效的票证;所以我们阻止了工人。第二天,我们完全重新启动了气流,所有工人都报告了Kerbe

我们使用的气流2.0.1具有以下设置:

  • 芹菜执行器和4个节点上的4个工人
  • 我们的大多数任务运行一些通过BashOperator启动的Hadoop应用程序
  • 使用模拟
  • 仅使用默认队列
首先,我们设置了一个自己的作业来更新run_as_用户的Kerberos票据。在大约一周的时间里,它工作正常,然后其中一名工作人员开始因丢失Kerberos票证而失败。我们找不到上次成功运行和失败作业之间的任何更改;节点上存在有效的票证;所以我们阻止了工人。第二天,我们完全重新启动了气流,所有工人都报告了Kerberos票据丢失的情况。暂时,当kinit在DAG中运行时,我们可以使用一个工人运行作业,并根据需要启用Kerberos

问题是

  • 如果有人能更详细地描述一下,气流与Kerberos的集成是如何工作的
  • 为什么在通过BashOperator启动应用程序时,从命令行使用的票证不可见

    • 谢谢您的评论。我做了一些测试,现在我想我能更好地理解发生在我们身上的事情:

      从BashOperator访问hdfs开始失败,出现Kerberos错误,我认为必须根据设置配置。测试时,工作人员试图通过在airflow.cfg中配置并由airflow kerberos创建的run_as_用户票证缓存文件读取该文件,但它没有该文件的权限

      因此,我检查了票据在生产中的存储位置,它们位于运行Airflow worker的服务的/tmp中。我的意思是kinit创建的票证在DAG中运行,但是我们更新票证的脚本没有ssh到Airflow workers运行的所有节点,所以票证存储在常规服务器/tmp中


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

      看起来源代码在那里,祝您玩得开心。。。发布来自“Kerberos更新者”的日志是个好主意。或者提到缺少日志,这将是一个有趣的事实(日志模式在源代码中…),我明白了。。我对这个很陌生,所以我只问了这么一个一般性的问题。。。同时努力学习更多。我正在研究代码,我不确定中的设置是否与Bash操作符相关?在我看来,它们只用于配置单元和Hdfs挂钩,对吗?嗯,因此在测试集群上使用它们,设置会影响BashOperator在根据documantation启用Kerberos后,它会起作用,只是当kinit在Kerberos中生成时,缓存获得的访问权限太少。我们正在获取org.apache.hadoop.security.AccessControlException:客户端无法通过:[令牌,KERBEROS]进行身份验证当缓存的权限得到增强时,它就工作了。