Docs 菜单
Docs 主页
/ /
MongoDB Atlas Kubernetes Operator
/

AtlasDatabaseUser 自定义资源

在此页面上

  • 连接密钥
  • 示例
  • 项目和集群
  • 不带作用域的数据库用户
  • 具有范围的数据库用户
  • 使用 X.509 身份验证的数据库用户
  • 具有 OIDC身份验证的数据库用户
  • 使用AWS IAM进行身份验证的数据库用户
  • 参数

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.scopesAtlasDatabaseUser自定义资源规范:

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 身份验证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

以下示例展示了使用OIDCAtlasDatabaseUser自定义资源规范。

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 IAMAtlasDatabaseUser自定义资源规范。

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会回退到以下任一项:

  • 父级atlasProjectspec.connectionSecretRef.name参数

  • global默认spec.connectionSecretRef.name 密钥(如果未为父 定义atlasProject

对于独立的 CRD,此参数为必填项。

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

类型:字符串

可选的

数据库对提供的 进行身份验证的 OIDCspec.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

类型:数组

Optional

包含创建用户的集群的列表。

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

请勿指定以下参数:

后退

Atlas 部署