我正在尝试使用 keytab 文件从我的 kubernetes pod 访问受 Kerberos 保护的 NFS 文件管理器。到目前为止,我已经做到了这一点。
Dockerfile
From centos:7
RUN yum -y install krb5-workstation krb5-libs nfs-utils
docker build -t kerberos-centos:7 .
ktutil: add_entry -password -p USER@PRINCIPAL -k 2 -e aes256-cts-hmac-sha1-96
Password for PRINCIPAL@KERBEROS_REALM:
ktutil: write_kt kerberos.keytab
ktutil: quit
生成密钥表后,如果我这样做
klist
我可以看到票证详细信息
Ticket cache: FILE:/tmp/krb5cc_XXXX
Default principal: PRINCIPAL@KERBEROS_REALM
Valid starting Expires Service principal
07/27/23 15:05:28 07/28/23 01:05:28 krbtgt/[email protected]
renew until 07/28/23 11:12:52
keytab
文件,该文件将作为秘密文件安装kubectl create secret generic kerberos-keytab --from-file=kerberos.keytab
krb5.conf
文件,该文件将作为 configmap 挂载kubectl create configmap krb5conf --from-file=krb5.conf
apiVersion: v1
kind: PersistentVolume
metadata:
name: nfs-kerberos
spec:
accessModes:
- ReadWriteMany
capacity:
storage: 1Gi
mountOptions:
- sec=krb5p
nfs:
path: /vol1/somepath/
server: XXXXXXXXXXXX
persistentVolumeReclaimPolicy: Retain
PVC
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: kerberos-pvc
namespace: XXXXX
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 1Gi
storageClassName: ""
kinit
命令从KDC服务器获取TGT。 Pod 使用 securityContext 与特定用户一起运行,该用户可以访问 NFS 文件管理器。这是 Pod 模板
apiVersion: v1
kind: Pod
metadata:
name: kerberos-pod
namespace: xxxxx
spec:
containers:
- image: kerberos-centos:7
imagePullPolicy: Always
name: kerberos-pod
command:
- sh
- -c
- |
kinit -V PRINCIPAL@KERBEROS_REALM -kt /etc/kerberos.keytab;
sleep 300000
volumeMounts:
- name: kerberoskeytab
mountPath: /etc/kerberos.keytab
subPath: kerberos.keytab
- name: krb5conf
mountPath: /etc/krb5.conf
subPath: krb5.conf
- name: nfs
mountPath: /mnt
securityContext:
runAsGroup: XXXXX
runAsUser: XXXXX
imagePullSecrets:
- name: artifactory-identity-token
volumes:
- name: nfs
persistentVolumeClaim:
claimName: kerberos-pvc
- name: kerberoskeytab
secret:
secretName: kerberos-keytab
items:
- key: kerberos.keytab
path: kerberos.keytab
- name: krb5conf
configMap:
name: krb5conf
items:
- key: krb5.conf
path: krb5.conf
pod 成功启动,但当我访问 pod 中的
/mnt
文件夹时,权限被拒绝。
bash-4.2$ cd /mnt/
bash: cd: /mnt/: Permission denied
如果我在 Pod 中运行
klist
,我可以看到 TGT 详细信息。
Ticket cache: FILE:/tmp/krb5cc_XXXX
Default principal: PRINCIPAL@KERBEROS_REALM
Valid starting Expires Service principal
07/27/23 15:05:28 07/28/23 01:05:28 krbtgt/[email protected]
renew until 07/28/23 11:12:52
但是如果我使用主体帐户登录 kubernetes 工作节点,我就可以访问 kubernetes pod 中的 NFS 共享。但不知道如何使用 keytab 文件访问 NFS 共享。
请帮忙。
提前致谢!