从 kubernetes pod 访问 Kerberos NFS 文件管理器

问题描述 投票:0回答:0

我正在尝试使用 keytab 文件从我的 kubernetes pod 访问受 Kerberos 保护的 NFS 文件管理器。到目前为止,我已经做到了这一点。

  1. 创建了 Dockerfile,其中安装了 Kerberos 工具。

Dockerfile

From centos:7

RUN yum -y install krb5-workstation krb5-libs nfs-utils

docker build -t kerberos-centos:7 .

  1. 在我的本地计算机上为有权访问 NFS 文件管理器的主体帐户创建了密钥表文件。
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
  1. 创建了 kubernetes 秘密来存储
    keytab
    文件,该文件将作为秘密文件安装
kubectl create secret generic kerberos-keytab --from-file=kerberos.keytab
  1. 创建了 configmap 来存储
    krb5.conf
    文件,该文件将作为 configmap 挂载
kubectl create configmap krb5conf --from-file=krb5.conf
  1. 创建了PV和PVC
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: ""
  1. 最终创建了访问NFS共享的pod模板文件,使用
    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 共享。

请帮忙。

提前致谢!

kubernetes kerberos kdc
© www.soinside.com 2019 - 2024. All rights reserved.