You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spark on K8s使用Secret实现Kerberos委托令牌示例及操作问询

在Kerberos认证的HDFS环境中为Spark on K8s创建并注入HDFS委托令牌到K8s Secret

前提条件

  • 拥有具备HDFS访问权限的Kerberos主体(例如spark@YOUR_REALM.COM)及对应keytab文件
  • 具备K8s集群内创建Secret的权限
  • 已配置好HDFS客户端文件(core-site.xml、hdfs-site.xml)和Kerberos配置文件(krb5.conf)

步骤1:获取Kerberos票据

通过keytab获取Kerberos TGT票据,确保后续操作能认证到HDFS:

kinit -kt /path/to/spark.keytab spark@YOUR_REALM.COM

用klist命令验证票据有效性:

klist

步骤2:生成HDFS委托令牌

使用HDFS客户端命令生成委托令牌,指定可续期令牌的主体(通常为Spark的Kerberos主体):

hdfs fetchdt --renewer spark@YOUR_REALM.COM hdfs_delegation_token

执行完成后,当前目录会生成名为hdfs_delegation_token的令牌文件。

步骤3:将令牌注入K8s Secret

有两种创建方式可选:

方式1:直接从文件创建

执行kubectl命令直接基于令牌文件生成Secret:

kubectl create secret generic hdfs-dt-secret \
  --from-file=hdfs.delegation.token=./hdfs_delegation_token \
  -n your-target-namespace

方式2:通过YAML配置创建

先将令牌文件内容转为Base64编码:

base64 hdfs_delegation_token

创建Secret的YAML文件(hdfs-dt-secret.yaml):

apiVersion: v1
kind: Secret
metadata:
  name: hdfs-dt-secret
  namespace: your-target-namespace
type: Opaque
data:
  hdfs.delegation.token: <替换为上面生成的Base64编码内容>

应用YAML文件:

kubectl apply -f hdfs-dt-secret.yaml

步骤4:配置Spark on K8s使用该Secret

在Spark提交命令中添加以下配置,让Spark Pod挂载Secret并读取令牌文件:

spark-submit \
  --master k8s://https://your-k8s-api-server:6443 \
  --conf spark.kubernetes.secrets.hdfs-dt-secret=/mnt/secrets/hdfs-dt \
  --conf spark.hadoop.hdfs.delegation.token.file=/mnt/secrets/hdfs-dt/hdfs.delegation.token \
  # 其他Spark配置参数...

注意事项

  • 委托令牌存在有效期,需定期重新生成并更新Secret,可通过K8s CronJob实现自动化刷新
  • 确保指定的--renewer主体被HDFS允许续期令牌,可在HDFS的hadoop.proxyuser.spark.groups等配置中授权
  • 需保证Spark使用的服务账号有权限读取目标命名空间下的hdfs-dt-secret

内容的提问来源于stack exchange,提问作者Michael

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 16:25:14