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
相关产品推荐
相关产品推荐

