如需了解详情,请参阅 Active Directory 概览。
本文档假定您熟悉如何应用 Kubernetes 清单文件以及如何使用 kubectl 命令行工具。如需了解详情,请参阅命令行工具 (kubectl)。
准备工作
如需启用 Active Directory 集成,您必须拥有以下各项:
- 部署在 Kubernetes 环境中的 AlloyDB Omni 集群
- Active Directory 服务器 keytab
从 AlloyDB Omni Kubernetes 操作器 1.4.0 版迁移到 1.5.0 版
如果您在 AlloyDB Omni 操作器 1.4.0 版或更低版本中使用 Active Directory 集成,则必须迁移到 AlloyDB Omni 操作器 1.5.0 版。
如需迁移到 AlloyDB Omni 操作器 1.5.0 版,请按照以下步骤操作:
- 将 AlloyDB Omni 操作器升级到 1.5.0 版。
- 创建用户定义的身份验证资源。
- 创建新的 UserDefinedAuthentication 资源清单。
- 使用目标 DBCluster 名称填充
spec.dbclusterRef
。 - 使用 keytab Secret 的名称填充
spec.keytabSecretRef
。 - 将与 Active Directory 和 Kerberos 身份验证相关的现有
pg_hba.conf
规则复制到spec.pgHbaEntries
字段中。 - 将现有的
pg_ident.conf rules
(如果有)复制到spec.pgIdentEntries
字段中。 - 应用此新清单,例如
kubectl apply -f user-auth-crd.yaml
。
- 移除预览配置并重新部署集群。
- 在 DBCluster 资源定义中,移除您之前用于配置 Active Directory 集成的所有注解,例如基于主机的身份验证 (HBA) 规则、ident 规则和 keytab 文件注解。
- 删除您创建的
pg_hba
和pg_ident
ConfigMap。 - 重新应用更新后的 DBCluster 清单。
配置 Active Directory 支持
使用 keytab 创建并应用 Secret:
apiVersion: v1 kind: Secret metadata: name: KEYTAB_SECRET_NAME namespace: DB_CLUSTER_NAMESPACE type: Opaque data: krb5.keytab: | KEYTAB_FILE_CONTENT
以下示例命令会在 Active Directory 服务器上生成 keytab:
ktpass /princ postgres/DBCLUSTER_HOST@REALM /Pass PASSWORD /mapuser postgres /crypto ALL /ptype KRB5_NT_Principal /out OUTPUT_PATH
ALLOYDB_HOST
是指向 DBCluster 或 DBCluster IP 地址的主机。应用以下用户定义的身份验证自定义资源清单:
apiVersion: alloydbomni.dbadmin.goog/v1 kind: UserDefinedAuthentication metadata: name: USER_DEFINED_AUTHENTICATION_NAME namespace: DB_CLUSTER_NAMESPACE spec: dbclusterRef: name: DB_CLUSTER_NAME keytabSecretRef: name: KEYTAB_SECRET_NAME pgHbaEntries: PG_HBA_ENTRIES pgIdentEntries: PG_IDENT_ENTRIES
替换以下内容:
USER_DEFINED_AUTHENTICATION_NAME
:UserDefinedConfiguration 的名称,例如DB_CLUSTER_NAME-ad-auth
。DB_CLUSTER_NAMESPACE
:此备份方案的 Kubernetes 命名空间。 该命名空间必须与数据库集群的命名空间一致。DB_CLUSTER_NAME
:您的数据库集群的名称(您在创建数据库集群时分配该名称)。KEYTAB_SECRET_NAME
:您创建的 keytab 的名称。PG_HBA_ENTRIES
:以字符串列表形式表示的pg_hba.conf
条目。这些条目会覆盖pg_hba.conf
中的默认条目。如果您添加了无效的配置,用户将无法登录。在上面的示例中,您添加了基于 GSS 的身份验证条目,然后添加了基于密码的身份验证条目。这意味着用户已在使用 GSS API 登录。如果此登录方法失败,则会使用基于密码的身份验证作为后备方案。
如需了解详情,请参阅 pg_hba.conf 文件。
PG_IDENT_ENTRIES
:以字符串列表形式表示的pg_ident.conf
条目。如需实现用户名映射,请在pg_hba.conf
文件的选项字段中指定map=
。如需了解详情,请参阅 Ident 映射。请参阅以下示例:
apiVersion: v1 kind: Secret metadata: name: db-keytab-dbcluster-sample type: Opaque data: krb5.keytab: | DUMMY_KEYTAB --- apiVersion: alloydbomni.dbadmin.goog/v1 kind: UserDefinedAuthentication metadata: name: dbcluster-sample-ad-auth spec: dbclusterRef: name: dbcluster-sample keytabSecretRef: name: db-keytab-dbcluster-sample pgHbaEntries: - hostgssenc all all 0.0.0.0/0 gss - hostgssenc all all ::1/128 gss - hostssl all all 0.0.0.0/0 scram-sha-256 - hostssl all all ::/0 scram-sha-256 pgIdentEntries: - usermap active_directory_user postgres_user
以 Active Directory 用户身份创建数据库角色
在数据库中创建与 Active Directory 用户匹配的角色。如需为 Active Directory 用户创建角色,请连接到集群并运行以下命令:
username=# CREATE ROLE "USERNAME@REALM" WITH LOGIN;
使用 Active Directory 用户身份登录数据库。您必须在所连接的客户端中启用
kinit
。在此示例中,postgres-client
Pod 已安装 kinit 和 psql,并配置为使用 psql 客户端连接到 AlloyDB Omni 集群。kubectl exec -it postgres-client -n DB_CLUSTER_NAMESPACE -- bash root:/# kinit USERNAME Password for USERNAME@REALM: root:/# psql -h HOSTNAME -d DB_NAME -U USERNAME@REALM psql (16.6 (Ubuntu 16.6-0ubuntu0.24.04.1), server 16.3) GSSAPI-encrypted connection Type "help" for help.
运行 SQL 查询。
username=# select * from TABLE_NAME;
停用 Active Directory 身份验证
如需停用 Active Directory 身份验证,请运行以下 Helm 命令:
helm upgrade alloydbomni-operator PATH_TO_CHART -n alloydb-omni-system --set userDefinedAuthentication.enabled=false
该命令返回以下输出:
Release "alloydbomni-operator" has been upgraded. Happy Helming! NAME: alloydbomni-operator LAST DEPLOYED: CURRENT_TIMESTAMP NAMESPACE: alloydb-omni-system STATUS: deployed REVISION: 2 TEST SUITE: None
后续步骤
- 将 Active Directory 用户支持与 AlloyDB Omni 集成。
- 将 Active Directory 群组支持与 AlloyDB Omni 集成。
- 在 Kubernetes 上集成 Active Directory 群组支持。
- 在 AlloyDB Omni 中排查 Active Directory 集成问题。