本文档介绍了如何在基于 Kubernetes 的 AlloyDB Omni 数据库集群上启用 Active Directory 集成,以允许基于 Active Directory 的现有用户访问 AlloyDB Omni 数据库。Active Directory 集成使用 GSSAPI 为通过 Kerberos 机制进行身份验证的用户提供授权,以便他们访问 AlloyDB Omni。
如需了解详情,请参阅 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 集成问题。