5.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。以下说明创建并配置所需的
serviceAccount
、ClusterRole
和ClusterRoleBinding
,以允许 OpenShift Data Foundation 使用 Vault 进行身份验证。将以下 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
识别与上述创建的 serviceaccount(SA)关联的 secret 名称:
$ oc -n openshift-storage get sa rbd-csi-vault-token-review -o jsonpath="{.secrets[*]['name']}"
从 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
检索 OCP 集群端点:
$ oc config view --minify --flatten -o jsonpath="{.clusters[0].cluster.server}"
使用上面步骤中收集的信息在 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>
在 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
:包含来自 Vault 的客户端证书的 OpenShift Data Foundation 集群中的 secret -
vaultClientCertKeyFromSecret
:包含来自 Vault 的客户端私钥的 OpenShift Data Foundation 集群中的 secret -
tenantSAName
:(可选)租户命名空间中的服务帐户名称。默认值为ceph-csi-vault-sa
。如果要使用其他名称,则必须相应地设置此变量。
-
接下来,按照 第 5.2.3 节 “为 PV 加密创建存储类的步骤” 中的步骤操作。