AtlasDatabaseUser
自定义资源
AtlasDatabaseUser
自定义资源配置Atlas项目中的数据库用户。 您可以为每个项目而不是每个集群创建数据库用户。 因此, AtlasDatabaseUser
自定义资源配置包含对 AtlasProject
自定义资源的引用。 事先创建AtlasProject
自定义资源。
重要
自定义资源不再默认删除对象
Atlas Kubernetes Operator 使用自定义资源配置文件来管理 Atlas 配置,但从 Atlas Kubernetes Operator 2.0 开始,在 Kubernetes 中删除的自定义资源将不再从 Atlas 中删除。相反,Atlas Kubernetes Operator 只是不再管理这些资源。例如,如果您在 Kubernetes 中删除 AtlasProject
自定义资源,Atlas Kubernetes Operator 不会再自动从 Atlas 中删除相应项目,从而防止意外删除。要了解更多信息,包括如何将此行为恢复为 Atlas Kubernetes Operator 2.0 之前使用的默认行为,请参阅新默认值:Atlas Kubernetes Operator 2.0 中的删除保护。
同样,如果您使用Atlas Kubernetes Operator从Kubernetes中的Atlas项目中删除团队,则Atlas Kubernetes Operator不会从Atlas中删除团队。
以下示例显示了对AtlasProject
自定义资源的引用:
spec: projectRef: name: my-project
Atlas Kubernetes Operator 确保 Atlas 中的数据库用户配置与 Kubernetes 中的配置相匹配。
Atlas Kubernetes Operator使用Atlas Database Users API执行以下操作之一:
创建新的数据库用户。
更新现有用户。
在创建数据库用户之前,必须创建不透明 密钥 使用单个password
字段登录 Atlas 集群数据库。
注意
您必须在同一 命名空间 中创建密钥AtlasDatabaseUser
自定义资源所在的位置。
以下示例将创建一个密钥:
kubectl create secret generic the-user-password --from-literal="password=P@@sword%"
Atlas Kubernetes Operator 仅监视带有标签 的密钥,以避免监视不必要的atlas.mongodb.com/type=credentials
密钥 。
以下示例标记了密钥:
kubectl label secret the-user-password atlas.mongodb.com/type=credentials
连接密钥
在 Atlas Kubernetes Operator 在 Atlas 中成功创建或更新数据库用户后,Atlas Kubernetes Operator 会在AtlasDatabaseUser
自定义资源所在的同一命名空间中创建或更新连接密钥。
连接密钥包含连接到 Atlas 集群所需的所有信息,包括以下参数:
Parameter | 说明 |
---|---|
connectionStringStandard | 公共 mongodb:// 连接URI 。 |
connectionstringStandardSrv | 公共 mongodb+srv:// 连接URI 。 |
username | 标识数据库用户的名称。 |
password | 数据库用户的密码。 |
在 Kubernetes 中运行的应用程序可以使用此信息连接到 Atlas 集群。 您可以将密钥作为文件挂载到应用程序 Pod,应用程序进程可以读取这些文件以获取数据。
以下示例显示将密钥安装为环境变量:
spec: containers: - name: test-app env: - name: "CONNECTIONSTRING" valueFrom: secretKeyRef: name: project-cluster-basic-theuser key: connectionStringStandardSrv
以下示例展示了如何将密钥安装为文件:
spec: containers: - name: test-app volumeMounts: - mountPath: /var/secrets/ name: theuser-connection volumes: - name: theuser-connection secret: secretName: project-cluster-basic-theuser
默认, Atlas Kubernetes Operator会为AtlasDatabaseUser
引用的同一项目中的每个集群创建数据库用户连接密钥。 您可以使用spec.scopes
参数更改此行为。 此参数限制创建数据库用户的集群。 连接密钥的名称使用以下格式: <project_name>-<cluster_name>-<db_user_name>
。
示例
项目和集群
以下示例显示了 Atlas 项目以及引用该项目的集群:
apiVersion: atlas.mongodb.com/v1 kind: AtlasProject metadata: name: my-project spec: name: p1 projectIpAccessList: - ipAddress: "192.0.2.15" comment: "IP address for Application Server A" apiVersion: atlas.mongodb.com/v1 kind: AtlasDeployment metadata: name: my-aws-cluster spec: name: aws-cluster projectRef: name: my-project providerSettings: instanceSizeName: M10 providerName: AWS regionName: US_EAST_1 apiVersion: atlas.mongodb.com/v1 kind: AtlasDeployment metadata: name: my-gcp-cluster spec: name: gcp-cluster projectRef: name: my-project providerSettings: instanceSizeName: M10 providerName: GCP regionName: EASTERN_US
不带作用域的数据库用户
以下示例显示了省略spec.scopes
的AtlasDatabaseUser
自定义资源规范:
apiVersion: atlas.mongodb.com/v1 kind: AtlasDatabaseUser metadata: name: my-database-user spec: roles: - roleName: readWriteAnyDatabase databaseName: admin projectRef: name: my-project username: theuser passwordSecretRef: name: the-user-password
创建此自定义资源后,Atlas Kubernetes Operator 会创建以下密钥:
p1-aws-cluster-theuser
p1-gcp-cluster-theuser
具有范围的数据库用户
以下示例显示了 AtlasDatabaseUser
自定义资源规范,其中spec.scopes
仅设置为GCP集群:
apiVersion: atlas.mongodb.com/v1 kind: AtlasDatabaseUser metadata: name: my-database-user spec: roles: - roleName: "readWriteAnyDatabase" databaseName: "admin" projectRef: name: my-project username: theuser passwordSecretRef: name: the-user-password scopes: - type: CLUSTER name: gcp-cluster
更新此资源后,Atlas Kubernetes Operator 将从 中删除theuser
aws-cluster
。它还从 Kubernetes 集群中删除p1-aws-cluster-theuser
密钥。
使用 X.509 身份验证的数据库用户
以下示例显示了采用X.509 身份验证的AtlasDatabaseUser
自定义资源规范。
apiVersion: atlas.mongodb.com/v1 kind: AtlasDatabaseUser metadata: name: my-database-user spec: username: CN=my-x509-authenticated-user,OU=organizationalunit,O=organization databaseName: "\$external" x509Type: "CUSTOMER" roles: - roleName: "readWriteAnyDatabase" databaseName: "admin" projectRef: name: my-project
具有 OIDC 身份验证的数据库用户
以下示例展示了使用OIDC的AtlasDatabaseUser
自定义资源规范。
apiVersion: atlas.mongodb.com/v1 kind: AtlasDatabaseUser metadata: name: my-database-user spec: roles: - roleName: "readWriteAnyDatabase" databaseName: "admin" projectRef: name: my-project username: my-oidc-group-id/my-idp-group-name oidcAuthType: IDP_GROUP
使用 AWS IAM 进行身份验证的数据库用户
以下示例显示了使用AWS IAM的AtlasDatabaseUser
自定义资源规范。
apiVersion: atlas.mongodb.com/v1 kind: AtlasDatabaseUser metadata: name: my-database-user spec: username: arn:aws:iam::123456789012:user/johndoe roles: - roleName: "readWriteAnyDatabase" databaseName: "admin" projectRef: name: my-project awsIAMType: USER
参数
本部分介绍一些可用的关键AtlasDatabaseUser
自定义资源参数。 有关可用参数的完整列表,请参阅Atlas数据库用户API 。 请参阅这些描述、可用示例和API文档,自定义您的规范。
spec.awsIAMType
类型:字符串
Optional
指示数据库用户是使用与用户关联的AWS IAM 档案还是用户的角色进行凭证验证的标签。如果您不指定值, Atlas将使用默认值
NONE
。此参数接受:
无不使用AWS IAM身份验证的用户。用户使用与该用户关联的AWS IAM 档案进行凭证验证的用户。ROLE使用与用户角色关联的AWS IAM 档案进行凭证验证的用户。
spec.connectionSecret.name
类型:字符串
可选的
不透明 密钥 的名称 包含Atlas Kubernetes Operator用于 连接 到Atlas的组织ID和 API密钥 。如果未指定, Atlas Kubernetes Operator会回退到以下任一项:
父级
atlasProject
的spec.connectionSecretRef.name
参数global
默认spec.connectionSecretRef.name
密钥(如果未为父 定义atlasProject
Atlas Kubernetes Operator 仅监视带有标签 的密钥,以避免监视不必要的
atlas.mongodb.com/type=credentials
密钥 。以下示例标记了密钥:
kubectl label secret the-user-password atlas.mongodb.com/type=credentials
spec.databaseName
类型:字符串
必需
数据库用户进行身份验证所依据的数据库。 数据库用户必须提供用户名和身份验证数据库才能登录 MongoDB。
如果数据库用户使用SCRAM-SHA进行身份验证,则此值必须为
admin
。如果数据库用户使用X.509进行身份验证,则此值必须为
\$external
。
spec.externalProjectRef.id
类型:字符串
可选的
数据库用户所属项目的ID 。您必须指定现有Atlas项目的项目ID 。对于属于以下任一组织托管的项目的数据库用户,此参数是必需的:
Atlas Kubernetes Operator的不同实例
Atlas Kubernetes Operator以外的工具
对于属于由同一Atlas Kubernetes Operator实例托管的项目的数据库用户,如果不使用 ,请使用
spec.projectRef.name
spec.externalProjectRef.id
。
spec.oidcAuthType
类型:字符串
可选的
数据库对提供的 进行身份验证的 OIDC
spec.username
方法。如果数据库用户使用OpenID Connect进行身份验证,则此值必须为
IDP_GROUP
。
spec.passwordSecretRef
类型:字符串
可选的
对 密钥 的引用 包含密码。SCRAM-SHA身份验证方法需要此参数。
spec.projectRef.name
类型:字符串
可选的
数据库用户所属项目的名称。您必须指定现有的
AtlasProject
自定义资源。此参数仅适用于属于由同一实例Atlas Kubernetes Operator托管的项目的数据库用户。对于属于以下任一机构托管的项目的数据库用户:
Atlas Kubernetes Operator的不同实例
Atlas Kubernetes Operator以外的工具
使用
spec.externalProjectRef.name
。
spec.roles
类型:数组
必需
包含用户角色以及角色适用的数据库或集合的列表。 有关可用参数的完整列表,请参阅 Atlas数据库用户 API。
spec.scopes.name
类型:字符串
可选的
人类可读标签,用于标识数据库用户可以访问权限的集群。 如果指定了
spec.scopes
,则必须指定此参数。
spec.scopes.type
类型:字符串
可选的
人类可读标签,用于标识数据库用户可以访问的资源类型。 Atlas Kubernetes Operator 目前仅支持
CLUSTER
。 如果指定了spec.scopes
,则必须指定此参数。
spec.username
类型:字符串
必需
人类可读标签,用于标识向MongoDB database或集合进行身份验证所需的用户。
如果数据库用户使用OpenID Connect进行身份验证,则此值必须是Atlas OIDC IdP ,后跟正斜杠
/
和IdP群组名称。如果数据库用户使用Amazon Web Services IAM 凭证进行身份验证,则此值必须是使用Amazon Web Services Amazon Web ServicesIAM 凭证 身份Amazon 凭证的用户的角色(采用 资源名称格式)。
spec.x509Type
类型:字符串
Optional
X. 509方法,数据库用于对提供的
spec.username
进行身份验证。 如果您不指定值,Atlas 将使用默认值NONE
。此参数接受:
无不使用 X.509 身份验证的用户。托管使用 Atlas 托管的 X.509 的用户。
您必须为
spec.databaseName
参数指定\$external
。客户使用自管理 X. 509的用户。 使用此
x509Type
创建的用户需要在spec.username
参数中使用公用名 (CN)。 要了解详情,请参阅 RFC2253 。您必须为
spec.databaseName
参数指定\$external
。
有关API提供的配置参数,请参阅 Atlas数据库用户 API。
目前,Atlas Kubernetes Operator 不支持 Atlas Database Users API 提供的以下参数:
ldapAuthType
请勿指定以下参数:
groupId
password
请改为指定
spec.passwordSecretRef
。