2.2.2. 使用 vaulttenantsa的先决条件

  • OpenShift 数据基础集群处于 Ready 状态。
  • 在外部密钥管理系统 (KMS) 上,

    • 确保策略存在,并且已启用 Vault 中的键值后端路径。如需更多信息,请参阅在 Vault 中启用键值和策略
    • 确保您在 Vault 服务器上使用签名的证书。
  • 在租户命名空间中创建以下 serviceaccount,如下所示:

    $ cat <<EOF | oc create -f -
    apiVersion: v1
    kind: ServiceAccount
    metadata:
        name: ceph-csi-vault-sa
    EOF
  • 必须配置 Kubernetes 身份验证方法,然后才能使用 OpenShift 数据基础进行身份验证并开始使用 Vault。以下说明创建并配置所需的 serviceAccountClusterRole 和 ClusterRoleBinding ,以允许 OpenShift Data Foundation 使用 Vault 进行身份验证。

    1. 将以下 YAML 应用到您的 Openshift 集群:

      apiVersion: v1
      kind: ServiceAccount
      metadata:
        name: rbd-csi-vault-token-review
      ---
      kind: ClusterRole
      apiVersion: rbac.authorization.k8s.io/v1
      metadata:
        name: rbd-csi-vault-token-review
      rules:
        - apiGroups: ["authentication.k8s.io"]
          resources: ["tokenreviews"]
          verbs: ["create", "get", "list"]
      
      ---
      kind: ClusterRoleBinding
      apiVersion: rbac.authorization.k8s.io/v1
      metadata:
        name: rbd-csi-vault-token-review
      subjects:
        - kind: ServiceAccount
          name: rbd-csi-vault-token-review
          namespace: openshift-storage
      roleRef:
        kind: ClusterRole
        name: rbd-csi-vault-token-review
        apiGroup: rbac.authorization.k8s.io
    2. 识别与上述创建的 serviceaccount(SA)关联的 secret 名称:

      $ oc -n openshift-storage get sa rbd-csi-vault-token-review -o jsonpath="{.secrets[*]['name']}"
    3. 从 secret 获取令牌和 CA 证书:

      $ oc get secret <secret associated with SA> -o jsonpath="{.data['token']}" | base64 --decode; echo
      $ oc get secret <secret associated with SA> -o jsonpath="{.data['ca\.crt']}" | base64 --decode; echo
    4. 检索 OCP 集群端点:

      $ oc config view --minify --flatten -o jsonpath="{.clusters[0].cluster.server}"
    5. 使用上面步骤中收集的信息在 Vault 中设置 kubernetes 验证方法,如下所示:

      $ vault auth enable kubernetes
      $ vault write auth/kubernetes/config token_reviewer_jwt=<SA token> kubernetes_host=<OCP cluster endpoint> kubernetes_ca_cert=<SA CA certificate>
    6. 在 Vault 中为租户命名空间创建一个角色:

      $ vault write "auth/kubernetes/role/csi-kubernetes" bound_service_account_names="ceph-csi-vault-sa" bound_service_account_namespaces=<tenant_namespace> policies=<policy_name_in_vault>

      csi-kubernetes 是 OpenShift Data Foundation 在 Vault 中寻找的默认角色名称。Openshift Data Foundation 集群中租户命名空间中的默认服务帐户名称为 ceph-csi-vault-sa。这些默认值可以通过在租户命名空间中创建 ConfigMap 来覆盖。

      有关覆盖默认名称的更多信息,请参阅使用租户 ConfigMap 覆盖 Vault 连接详情

  • 要创建一个使用 vaulttenantsa 方法进行 PV 保护的存储类,您必须编辑现有的 ConfigMap 或创建名为 csi-kms-connection-details 的配置映射,它将保存建立与 Vault 连接所需的所有信息。

    以下提供的 yaml 示例可用于更新或创建 csi-kms-connection-detail ConfigMap:

    apiVersion: v1
    data:
      vault-tenant-sa: |-
        {
          "encryptionKMSType": "vaulttenantsa",
          "vaultAddress": "<https://hostname_or_ip_of_vault_server:port>",
          "vaultTLSServerName": "<vault TLS server name>",
          "vaultAuthPath": "/v1/auth/kubernetes/login",
          "vaultAuthNamespace": "<vault auth namespace name>"
          "vaultNamespace": "<vault namespace name>",
          "vaultBackendPath": "<vault backend path name>",
          "vaultCAFromSecret": "<secret containing CA cert>",
          "vaultClientCertFromSecret": "<secret containing client cert>",
          "vaultClientCertKeyFromSecret": "<secret containing client private key>",
          "tenantSAName": "<service account name in the tenant namespace>"
        }
    metadata:
      name: csi-kms-connection-details
    • encryptionKMSType :应设置为 vaulttenantsa,以使用服务帐户通过 vault 进行身份验证。
    • vaultAddress: 使用端口号的 vault 服务器的主机名或 IP 地址。
    • vaultTLSServerName:(可选) vault TLS 服务器名称
    • vaultAuthPath:(可选)在 Vault 中启用 kubernetes auth 方法的路径。默认路径为 kubernetes。如果在 kubernetes 之外的其他路径中启用了 auth 方法,则需要将此变量设置为 "/v1/auth/<path>/login"。
    • vaultAuthNamespace:(可选)启用了 kubernetes auth 方法的 Vault 命名空间。
    • vaultNamespace :(可选)用于存储密钥的后端路径的 Vault 命名空间
    • vaultBackendPath :存储加密密钥的 Vault 中的后端路径
    • vaultCAFromSecret: 包含来自 Vault 的 CA 证书的 OpenShift Data Foundation 集群中的 secret
    • vaultClientCertFromSecret: OpenShift Data Foundation 集群中的 secret,其中包含来自 Vault 的客户端证书
    • vaultClientCertKeyFromSecret: OpenShift Data Foundation 集群中的 secret,其中包含来自 Vault 的客户端私钥
    • tenantSAName :(可选)租户命名空间中的服务帐户名称。默认值为 ceph-csi-vault-sa。如果要使用其他名称,则必须相应地设置此变量。

接下来,按照 第 2.2.3 节 “为 PV 加密创建存储类的步骤” 中的步骤操作。