Flink Kerberos 身份认证设置与配置:从安全模块原理到三种部署模式实战
Flink Kerberos 身份认证设置与配置从安全模块原理到三种部署模式实战【免费下载链接】flink项目地址: https://gitcode.com/gh_mirrors/fli/flinkKerberos 是 Flink 对接 Hadoop 生态HDFS、HBase、ZooKeeper与 Kafka 等外部系统的首选身份认证方案。本文以 Flink 官方中文文档为骨架结合本仓库源码flink-core与flink-runtime中的安全实现系统讲解 Kerberos 安全框架的目标、三大安全模块的工作原理、完整配置参数、以及 Standalone / 原生 Kubernetes / YARN 三种部署模式下的启用步骤。读完本文你将能够为生产环境的 Flink 集群正确配置 keytab 或 ticket cache 认证并理解 TGT 自动续期与 delegation token 的底层机制。Kerberos 安全框架的目标Flink Kerberos 安全基础设施有三个主要目标安全访问数据集群内作业通过 connector例如 Kafka安全地访问数据认证 ZooKeeper对配置了 SASL 的 ZooKeeper 进行身份认证认证 Hadoop 组件对 HDFS、HBase 等 Hadoop 组件进行身份认证。生产场景中的流式作业通常会运行数天、数周甚至数月需要在作业的整个生命周期内持续认证数据源。与 Hadoop delegation token 和 ticket 缓存项不同Kerberos keytab 不会在这个时间跨度内过期因此是长周期作业的首选凭据形式。当前实现支持使用以下几种凭据运行 Flink 集群JobManager / TaskManager / 作业keytab 文件首选凭据缓存credential cache例如由kinit创建的缓存文件Hadoop delegation token用户提供的 token 不会被续期且可能被 Flink 覆盖。需要注意同一集群的所有作业共享为该集群配置的凭据。如果某个作业需要使用不同的 keytab只需单独启动一个配置不同的 Flink 集群。多个 Flink 集群可以在 Kubernetes 或 YARN 环境中并行运行互不影响。Flink Security 如何工作从概念上讲Flink 程序可能使用自研或第三方 connectorKafka、HDFS、Cassandra、Flume、Kinesis 等这些 connector 需要任意的认证方式Kerberos、SSL/TLS、用户名/密码等。虽然满足所有 connector 的安全需求仍在推进中但Flink 已经为 Kerberos 身份认证提供了一流支持覆盖以下服务和 connectorKafka0.9HDFSHBaseZooKeeper注意每个服务或 connector 的 Kerberos 可以独立启用。例如你可以启用 Hadoop security 而不为 ZooKeeper 开启 Kerberos反之亦然。组件之间共享的只是 Kerberos 凭据的配置每个组件会显式地使用它。Flink 安全内部架构建立在**安全模块SecurityModule**之上——即org.apache.flink.runtime.security.modules.SecurityModule接口安全模块在 Flink 启动过程中被安装。从源码看模块由security.module.factory.classes配置项驱动其默认值为三个工厂类见 SecurityOptions.javasecurity.module.factory.classes: org.apache.flink.runtime.security.modules.HadoopModuleFactory, org.apache.flink.runtime.security.modules.JaasModuleFactory, org.apache.flink.runtime.security.modules.ZookeeperModuleFactory下面分别介绍每个安全模块。Hadoop Security 模块该模块使用 HadoopUserGroupInformationUGI类建立进程范围的登录用户上下文登录用户随后用于与 Hadoop 组件的所有交互包括 HDFS、HBase 和 YARN。如果启用了 Hadoop security在core-site.xml中设置hadoop.security.authenticationkerberos登录用户将拥有配置的 Kerberos 凭据否则登录用户仅继承启动集群的操作系统账户的用户身份。具体的登录过程遵循以下优先级参考 security-kerberos.md 英文版当hadoop.security.authentication为kerberos时若配置了security.kerberos.login.keytab和security.kerberos.login.principal执行keytab 登录若配置了security.kerberos.login.use-ticket-cache执行credential cache 登录其他所有情况使用启动进程的OS 账户身份。从源码实现看HadoopModule.java模块安装时会先通过KerberosLoginProvider判断是否能够登录并执行登录然后取UserGroupInformation.getLoginUser()作为登录用户如果登录用户来自 keytabloginUser.isFromKeytab()还会读取环境变量HADOOP_TOKEN_FILE_LOCATION指向的 token 存储文件并合并凭据。此外HadoopModule 会启动一个名为TGTRenewalExecutorService的定时任务来自动续期 TGT它按security.kerberos.relogin.period默认 1 分钟周期调度loginUser.checkTGTAndReloginFromKeytab()。该方法的注释解释了这样做的原因Hadoop 2.x 的 keytab 登录似乎是自动续期的但 Hadoop 3.x 中该行为是可配置的hadoop.kerberos.keytab.login.autorenewal.enabledFlink 通过自己的定时任务确保无论该配置如何用户始终保持登录状态。与模块配套的还有安全上下文SecurityContextHadoopSecurityContext.java 通过ugi.doAs(...)在已初始化的 UGI 与安全凭据下执行用户代码这正是作业以登录用户身份访问 Hadoop 组件的底层机制。JAAS Security 模块该模块为集群提供动态 JAAS 配置使配置的 Kerberos 凭据对 ZooKeeper、Kafka 以及其他依赖 JAAS 的组件可用。从源码看JaasModule.java模块安装时执行以下操作确保java.security.auth.login.config系统属性指向一个存在的 JAAS 配置文件如果用户未通过该属性提供静态配置则会在 Flink 临时目录io.tmp.dirs第一个目录生成默认的jaas-*.conf文件资源模板为flink-jaas.conf这是为了兼容 ZooKeeper 和 Kafka——它们会检查该系统属性及文件是否存在将既有配置包装为DynamicConfiguration动态配置为security.kerberos.login.contexts中列出的每个登录上下文注入 krb5 登录条目。登录条目由getAppConfigurationEntries构建当配置了 keytab 时生成 keytab 条目当useTicketCache()为 true 时生成 ticket cache 条目两者可同时存在。用户也可以使用 Java SE 文档中描述的机制提供静态 JAAS 配置文件通过-Djava.security.auth.login.config/path/to/jaas.conf指定。静态配置项会覆盖该模块提供的任何动态配置项。关于登录上下文login contextSecurityOptions.java 中的说明非常关键security.kerberos.login.contexts逗号分隔的登录上下文列表用于向这些上下文提供 Kerberos 凭据。例如设置为Client,KafkaClient表示同时将凭据用于 ZooKeeper 认证和 Kafka 认证。对应的解析逻辑在 SecurityConfiguration.java 中通过parseList完成配置文件中的逗号分隔值会被拆分为多个上下文名称。ZooKeeper Security 模块该模块配置某些进程范围内的 ZooKeeper 安全相关设置即ZooKeeper 服务名称service name默认为zookeeperJAAS 登录上下文名称login context name默认为Client。从源码看ZooKeeperModule.java模块通过设置以下 JVM 系统属性生效系统属性含义对应配置项zookeeper.sasl.client是否启用 ZK 客户端 SASLzookeeper.sasl.disable取反默认 false 即启用 SASLzookeeper.sasl.client.username期望的 ZooKeeper 服务名zookeeper.sasl.service-name默认zookeeperzookeeper.sasl.clientconfig使用的登录上下文名称zookeeper.sasl.login-context-name默认Client安装时模块会保存原有属性值卸载时uninstall会恢复现场保证模块的可逆性。Kerberos 相关配置参数总览所有安全相关配置项统一定义在 SecurityOptions.java 中以下是与 Kerberos 认证直接相关的核心参数配置项默认值说明security.kerberos.login.keytab无Kerberos keytab 文件的绝对路径包含用户凭据旧键名security.keytab已废弃security.kerberos.login.principal无与 keytab 关联的 Kerberos principal 名称旧键名security.principal已废弃security.kerberos.login.use-ticket-cachetrue是否从 Kerberos ticket cache 中读取凭据security.kerberos.login.contexts无逗号分隔的登录上下文列表例如Client,KafkaClientsecurity.kerberos.krb5-conf.path无krb5.conf 文件的本地路径配置后 Flink 会将其挂载到 Kubernetes/YARN 的 JobManager 与 TaskManager 容器中。注意KDC 必须能从容器内部访问security.kerberos.relogin.period1 minkeytab 自动登录的时间周期用于始终保持有效的 TGTsecurity.kerberos.access.hadoopFileSystems无分号分隔的 Kerberos 安全 Hadoop 文件系统列表例如hdfs://namenode2:9002;hdfs://namenode3:9003。JobManager 需要能访问这些文件系统以获取安全 tokensecurity.delegation.tokens.enabledtrue是否启动外部服务的 delegation token 系统旧键名security.kerberos.fetch.delegation-token已废弃security.delegation.tokens.renewal.retry.backoff1 hdelegation token 获取失败后的重试等待时间security.delegation.tokens.renewal.time-ratio0.75在 token 到期时间的该比例点重新获取新凭据zookeeper.sasl.disablefalse是否禁用 ZooKeeper 的 SASL 认证zookeeper.sasl.service-namezookeeperZooKeeper SASL 服务名zookeeper.sasl.login-context-nameClientZooKeeper SASL 登录上下文名部署模式下面针对每种部署模式给出启用安全集群的具体步骤。所有安全相关配置项均属于 Flink 配置文件中与外部系统认证Auth with external systems这一节完整参数说明可参考 Flink 配置文档。Standalone 模式在 standalone / cluster 模式下运行安全 Flink 集群的步骤在所有集群节点的 Flink 配置文件中添加安全相关配置选项确保 keytab 文件存在于每个集群节点上security.kerberos.login.keytab指定的路径正常部署 Flink 集群。Standalone 模式下 Flink 不会自动分发 keytab因此每个节点都必须能读到相同的 keytab 文件这是该模式与 Kubernetes/YARN 模式最大的区别。原生 Kubernetes 和 YARN 模式在原生 Kubernetes 或 YARN 模式下运行安全 Flink 集群的步骤在客户端的 Flink 配置文件中添加安全相关配置选项确保 keytab 文件存在于客户端上security.kerberos.login.keytab指定的路径正常部署 Flink 集群。在 YARN 和原生 Kubernetes 模式下keytab 文件会被自动从客户端拷贝到 Flink 容器中无需手工分发。要启用 Kerberos 认证还需要 Kerberos 配置文件krb5.conf。该文件可以从集群环境中获取也可以由 Flink 上传。选择后者时配置security.kerberos.krb5-conf.path指定 Kerberos 配置文件的本地路径Flink 会将该文件复制到相应容器或 pod 中。使用kinit仅限 YARN在 YARN 模式下可以不使用 keytab而只使用由kinit管理的 ticket 缓存来部署安全 Flink 集群。这种方式避免了生成 keytab 的复杂性也无需将 keytab 委托给集群管理器。使用 Flink CLI 可以获取 Hadoop delegation token用于 HDFS 和 HBase。主要缺点是集群必须是短暂的因为生成的 delegation token 会过期通常在一周内。使用kinit前需要了解几点关键事实凭据缓存的形态credential cache 可以有多种表现形式最常见的是FILE类型。确保执行 Kerberos 认证的所有集群节点上都能访问到该凭据缓存生成方式credential cache 主要通过执行kinit命令生成与 keytab 的本质区别keytab 可以被生成成永不过期而 credential cache 有到期时间保持缓存最新完全是用户的责任。使用kinit运行安全 Flink 集群的步骤在客户端的 Flink 配置文件中添加安全相关配置选项使用kinit命令登录可选确保执行 Kerberos 认证的所有集群节点上都有可用的凭据缓存正常部署 Flink 集群。完整配置示例以下是一个基于 keytab 的flink-conf.yaml安全配置示例可直接用于 YARN 或原生 Kubernetes 提交客户端# Kerberos 凭据 security.kerberos.login.keytab: /path/to/user.keytab security.kerberos.login.principal: userEXAMPLE.COM # 将凭据提供给 ZooKeeper 和 Kafka security.kerberos.login.contexts: Client,KafkaClient # 使用 keytab 登录关闭 ticket cache 优先项避免歧义 security.kerberos.login.use-ticket-cache: false # krb5.conf 由 Flink 上传到容器/pod security.kerberos.krb5-conf.path: /etc/krb5.conf # 需要访问的附加安全文件系统可选 # security.kerberos.access.hadoopFileSystems: hdfs://namenode2:9002;hdfs://namenode3:9003对应地core-site.xml中需设置hadoop.security.authenticationkerberosHBase 场景下还需在hbase-site.xml中设置hbase.security.authenticationkerberos。更多细节Ticket 更新TGT 续期使用 Kerberos 的每个组件都独立负责续期Kerberos ticket-granting-ticketTGTHadoop、ZooKeeper、Kafka在提供 keytab 时都会自动续期 TGTDelegation token 场景下YARN 本身负责续期 token续期至其最大生命周期credential cache 场景下保持 TGT 有效是用户的责任需周期性执行kinit刷新缓存。值得一提的是即便 Hadoop/ZooKeeper/Kafka 各自有自动续期机制Flink 的 HadoopModule.java 仍额外启动了一个 TGT 续期线程池周期调用checkTGTAndReloginFromKeytab()该方法是幂等的TGT 无需续期时为空操作以此兜底 Hadoop 3.x 中可配置的自动续期行为确保 keytab 登录用户的 TGT 始终有效。附Delegation Token委托令牌支持作为 Kerberos 认证的延伸Flink 1.17 起以实验特性加入了 delegation token 支持这是一个重量级话题详情见 Delegation token 文档。在与 Hadoop 系服务通信时Flink 可以获取 delegation token使非本地进程也能完成认证支持范围包括HDFS 及其他 Hadoop 文件系统HBase。使用 Hadoop 文件系统如 HDFS 或 WebHDFS时Flink 可以为以下目录获取相应 tokenHadoop 默认文件系统security.kerberos.access.hadoopFileSystems中配置的文件系统YARN staging 目录。如果应用 classpath 中存在 HBase且 HBase 配置开启了 Kerberos 认证hbase.security.authenticationkerberosFlink 会获取 HBase token。Flink 还支持通过 Java Services 机制java.util.ServiceLoader扩展自定义 delegation token provider实现org.apache.flink.runtime.security.token.DelegationTokenProvider接口并在 jar 的META-INF/services目录中列出实现类全名即可被 Flink 加载参考 flink-runtime 中的 token 包结构。对应的开关配置为security.delegation.token.serviceName.enabled默认true可通过 SecurityOptions.forProvider 按服务名精细控制。小结Flink 的 Kerberos 安全体系以SecurityModule为骨架在进程启动时依次安装 Hadoop、JAAS、ZooKeeper 三个模块分别负责 Hadoop UGI 登录上下文、动态 JAAS 凭据注入与 ZooKeeper SASL 进程参数。生产部署时优先选择 keytab 方案以获得长期有效的凭据与自动 TGT 续期YARN 短生命周期集群可退而使用kinit的 credential cache需要向非本地进程授权时再叠加 delegation token 能力。三种部署模式的差异仅在于凭据与 krb5.conf 的分发方式——Standalone 需手工分发Kubernetes/YARN 由 Flink 自动拷贝。【免费下载链接】flink项目地址: https://gitcode.com/gh_mirrors/fli/flink创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

ComfyUI 中文工作流全合集:50+ 模板导入即用,新手 10 分钟跑通首图

ComfyUI 中文工作流全合集:50+ 模板导入即用,新手 10 分钟跑通首图

ComfyUI 中文工作流全合集:50 模板导入即用,新手 10 分钟跑通首图 【免费下载链接】ComfyUI-Workflows-ZHO 我的 ComfyUI 工作流合集 | My ComfyUI workflows collection 项目地址: https://gitcode.com/GitHub_Trending/co/ComfyUI-Workflows-ZHO …

2026/9/24 19:30:45 阅读更多 →
Roc 编译器类型注解快照解析:以 `x : Str` 为例追踪完整编译流水线

Roc 编译器类型注解快照解析:以 `x : Str` 为例追踪完整编译流水线

【免费下载链接】roc A fast, friendly, functional language. 项目地址: https://gitcode.com/GitHub_Trending/ro/roc 点击查看 免费下载 Roc 是一个快速、友好、函数式的编程语言。本文以仓库中类型检查快照测试文件 test/snapshots/type_checking/str_annotati…

2026/9/21 12:40:11 阅读更多 →
Flutter实现记忆翻牌游戏:表情符号与状态管理

Flutter实现记忆翻牌游戏:表情符号与状态管理

1. 记忆翻牌游戏的核心设计思路记忆翻牌游戏(Memory Match)是一种经典的益智游戏,玩家需要翻开卡片并匹配相同的图案。在移动端实现这类游戏时,我们需要考虑几个关键因素:图案选择、状态管理、动画效果和交互逻辑。1.1…

2026/9/21 22:41:35 阅读更多 →

最新新闻

MySQL用户管理与权限设置实战:从GRANT到远程连接排查

MySQL用户管理与权限设置实战:从GRANT到远程连接排查

接手过不少MySQL环境,也帮人排查过很多数据库问题,发现真正让运维和开发头疼的,往往不是SQL写得不好,而是用户管理和权限设置这块没搞清爽。尤其是线上环境,账号多了、权限乱了,要么是开发抱怨连不上库&…

2026/9/24 19:31:02 阅读更多 →
基于PDERL的DEM通视分析:从数据预处理到批量计算实践

基于PDERL的DEM通视分析:从数据预处理到批量计算实践

做地形分析的人可能都有同感:拿到一块DEM数据,最想先做的往往不是急着算坡度坡向,而是先回答一个很“土”的问题——在A点到底能不能看见B点。这个需求落到GIS领域就是通视分析,也叫可视域分析。最近我在做区域性选址验证&#xf…

2026/9/24 19:31:02 阅读更多 →
数据建模与同步一体化平台:元数据打通与增量同步实战

数据建模与同步一体化平台:元数据打通与增量同步实战

1. 数据建模与同步一体化平台的核心命题拆解1.1 为什么“建模一套、同步一套”成了数据团队的标配痛点干数据这行的朋友大概率都经历过这种场景:数据仓库团队用一套建模工具画ER图、定义维度模型,另一边数据集成团队用另一套工具配同步任务,两…

2026/9/24 19:31:02 阅读更多 →
抖音音频批量提取实战:开源工具本地流水线方案

抖音音频批量提取实战:开源工具本地流水线方案

抖音上的音乐原声,很多时候刷到一首特别对味的BGM,想存下来当铃声或者做视频素材,结果发现要么带着水印,要么音质被压缩得没法听,要么一首首手动保存效率低到让人抓狂。我平时做视频剪辑,素材库里最缺的就是…

2026/9/24 19:31:02 阅读更多 →
2026空间智能数据服务商推荐,高精度室内定位靠谱厂商挑选指南

2026空间智能数据服务商推荐,高精度室内定位靠谱厂商挑选指南

摘要:随着物联网与智慧城市建设的持续推进,室内外空间信息可视化与高精度定位需求日益增长。面对众多服务商,企业该如何挑选技术扎实、产品完善、服务可靠的合作伙伴?本文从实际需求出发,梳理挑选要点,并介绍一家值得关注的空间智能数据服务商——蜂鸟视图及其蜂鸟云平台(Feng…

2026/9/24 19:31:02 阅读更多 →
2026年蓝牙耳机排行榜10强:从芯片到降噪的选购指南

2026年蓝牙耳机排行榜10强:从芯片到降噪的选购指南

1. 2026年的蓝牙耳机市场:为什么“看榜单下单”越来越不靠谱先说说我今天为什么要聊这个话题。蓝牙耳机这个品类,每年排行榜都在变,但2026年的榜单说实话比往年更有参考价值,也更难做。原因很简单:产业链彻底成熟了。以…

2026/9/24 19:30:01 阅读更多 →

日新闻

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为…

2026/9/24 0:00:19 阅读更多 →
单细胞注释实战:基于Scanpy的标记基因与参考映射流程解析

单细胞注释实战:基于Scanpy的标记基因与参考映射流程解析

简介:一份基于单细胞RNA测序数据的细胞类型注释算法研究Python毕业设计源码,针对计算机相关专业正在做毕设或需要项目实战的学习者,可用于课程设计与期末大作业。项目代码完整、经导师指导评审通过,可直接运行,覆盖数据…

2026/9/24 0:00:19 阅读更多 →
C#源生成器实战:用增量生成器替代反射,告别AOT崩溃

C#源生成器实战:用增量生成器替代反射,告别AOT崩溃

第一次在项目里被反射卡住,是在一个老旧的WinForms模块里:几十个类依赖PropertyChanged通知,运行时反射读属性、发通知,每次启动慢半拍不说,一上.NET Native/AOT裁剪模式几乎全面崩盘。后来我把这段逻辑全部改成C#源生…

2026/9/24 0:00:19 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/24 14:34:13 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/24 9:10:42 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/24 14:33:56 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/24 12:50:34 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/24 14:33:48 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/24 12:49:17 阅读更多 →