MongoDB.local SF, Jan 15: See the speaker lineup & ship your AI vision faster. Use WEB50 to save 50%
Find out more >
Docs 菜单
Docs 主页
/ /
/ / /

AtlasDatabaseUser 自定义资源

AtlasDatabaseUser自定义资源配置Atlas项目中的数据库用户。 您可以为每个项目而不是每个集群创建数据库用户。 因此, AtlasDatabaseUser自定义资源配置包含对 AtlasProject自定义资源的引用。 事先创建AtlasProject自定义资源

重要

自定义资源不再默认删除对象

  • Atlas Kubernetes Operator使用自定义资源配置文件来管理Atlas配置,但从Atlas Kubernetes Operator2.0 开始,您在Kubernetes中删除的自定义资源不再(默认)在Atlas中删除。相反, Atlas Kubernetes Operator只是停止管理Atlas中的这些资源。 AtlasProject示例,如果您在Kubernetes中删除 自定义资源,默认默认, Atlas Kubernetes Operator不再自动从Atlas中删除相应的项目。这种行为更改旨在帮助防止意外删除。 要学习;了解详情,包括如何将此行为恢复为在Atlas Kubernetes Operator.2 0之前使用的默认,请参阅新默认值: Atlas Kubernetes2 Operator.0 中的删除保护。

    同样,如果您使用Atlas Kubernetes Operator从Kubernetes中的Atlas项目中删除团队,则Atlas Kubernetes Operator不会从Atlas中删除团队。

  • 显式定义所需的配置详细信息,以避免隐式使用默认Atlas配置值。 在某些情况下,继承Atlas默认值可能会导致协调循环,从而阻止自定义资源实现 READY 状态。 示例,在 AtlasDeployment 自定义资源中显式定义所需的自动伸缩行为(如所包含的示例所示)可确保自定义资源中的静态实例大小不会重复应用于已启用自动伸缩的Atlas部署。

    autoScaling:
    diskGB:
    enabled: true
    compute:
    enabled: true
    scaleDownEnabled: true
    minInstanceSize: M30
    maxInstanceSize: M40

以下示例显示了对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:
description: "User for the reporting application."
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 仅设立为 Google Cloud集群:

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

以下示例显示了使用AmazonAtlasDatabaseUser Web ServicesAmazon Web Services IAM 的 自定义资源规范。

apiVersion: atlas.mongodb.com/v1
kind: AtlasDatabaseUser
metadata:
name: my-database-user
spec:
username: arn:aws:iam::123456789012:user/johndoe
databaseName: "$external"
roles:
- roleName: "readWriteAnyDatabase"
databaseName: "admin"
projectRef:
name: my-project
awsIamType: USER

AtlasDatabaseUser 是Atlas Database User API的模式

Name
类型
说明
必需

apiVersion

字符串

atlas.mongodb.com/v1

true

kind

字符串

AtlasDatabaseUser

true

metadata

对象

有关 metadata字段的字段,请参阅Kubernetes API 文档。

true

spec

对象

AtlasDatabaseUserSpec 在Atlas验证中定义数据库用户的目标状态:

  • (has(self.``externalProjectRef``) && !has(self.``projectRef``)) || (!has(self.``externalProjectRef``) && has(self.``projectRef``)):必须通过 externalProjectRefprojectRef 仅定义一个项目引用

  • (has(self.``externalProjectRef``) && has(self.``connectionSecret``)) || !has(self.``externalProjectRef``):引用外部项目时必须定义本地连接密钥

false

status

对象

AtlasDatabaseUserStatus 定义了观察到的状态 AtlasProject

false

AtlasDatabaseUserSpec 定义了Atlas中 Database User 的目标状态

Name
类型
说明
必需

roles

[]对象

Roles 是一个大量,其中包含此用户的 roles 以及 roles应用的数据库/集合。角色允许用户对指定数据库执行特定操作。

true

username

字符串

用户名是一个 username,用于向 MongoDB 进行身份验证。人类可读标签,表示向 MongoDB 进行身份验证的用户。此标签的格式取决于身份验证方法:对于 AWS IAM:对于 IAM 用户/角色,值应为 AWS ARN;如果是 OIDC 工作负载或劳动力:值应为Atlas OIDC IdP ID,后跟“/”,然后是 IdP群组名称;如果是纯文本身份验证:该值可以是任何值。

true

awsIamType

枚举

人类可读标签,用于指示新数据库用户是否通过Amazon Web Services ()AWS 进行身份验证。与用户或用户角色关联的身份和访问管理IAM ()凭证枚举: NONEUSERROLE 默认值:NONE

false

connectionSecret

对象

包含Atlas API 私钥和公钥的密钥名称。

false

databaseName

字符串

DatabaseName 是Atlas对用户进行身份验证所依据的数据库。如果用户使用AWSIAM 、x.509 LDAP、 或OIDC 工作负载进行身份验证,则此值应为“$external”。如果用户使用SCRAM -SHAOIDC Workforce 进行身份验证,则此值应为“admin”。默认值为“admin”。默认值:admin

false

deleteAfterDate

字符串

DeleteAfterDateUTCISO 8601 日期和时间格式的时间戳,之后Atlas会删除该用户。指定的日期必须是将来的日期,且在一周内。

false

description

字符串

此数据库用户的描述。最多 100 个字符。

false

externalProjectRef

对象

externalProjectRef 包含父Atlas项目ID。与“projectRef”字段互斥。

false

labels

[]对象

Labels 是一个大量,其中包含用于标签和分类数据库用户的键值对。每个键和值的最大长度为 255 个字符。

false

oidcAuthType

枚举

人类可读标签,指示新数据库用户名是否采用OIDC 联合身份验证。要创建联合身份验证群组(Workforce),请在此字段中指定IDP_GROUP 的值。要创建联合身份验证用户(工作负载),请在此字段中指定USER 的值。枚举:NONEIDP_GROUPUSER 默认值:NONE

false

passwordSecretRef

对象

PasswordSecret 是对保存用户密码的 Secret 的引用。

false

projectRef

对象

projectRef 是对父 AtlasProject资源的引用。与“externalProjectRef”字段互斥。

false

scopes

[]对象

作用域是该用户有权访问权限的集群和Atlas Data Lake 的大量。

false

x509Type

枚举

X509 Type 是指数据库对所提供的用户名进行身份验证时使用的 X.509 方法。枚举:NONEMANAGEDCUSTOMER 默认值:NONE

false

RoleSpec 允许用户对指定数据库执行特定操作。管理员数据库上的角色可以包括也应用于其他数据库的特权。

Name
类型
说明
必需

databaseName

字符串

DatabaseName 是用户具有指定角色的数据库。管理员数据库上的角色可以包括应用于其他数据库的特权。

true

roleName

字符串

RoleName 是角色的名称。此值可以是内置角色或自定义角色。

true

collectionName

字符串

CollectionName 是角色适用的集合。

false

包含Atlas API私钥和公钥的密钥名称。

externalProjectRef 保存父Atlas项目ID。与 "projectRef"字段互斥。

Name
类型
说明
必需

id

字符串

ID 是Atlas项目ID

true

LabelSpec 包含用于标签和分类 Cluster/DBUser 的键值对

Name
类型
说明
必需

key

字符串

用于标签和分类该组件的键。

true

value

字符串

设立为用于标签和分类该组件的键的值。

true

PasswordSecret 是对保存用户密码的 Secret 的引用。

Name
类型
说明
必需

name

字符串

名称是Kubernetes资源的 name

true

projectRef 是对父 AtlasProject资源的引用。与 "externalProjectRef"字段互斥。

Name
类型
说明
必需

name

字符串

Kubernetes资源名称

true

namespace

字符串

Kubernetes资源的命名空间

false

ScopeSpec 如果存在,则数据库用户只能访问权限指定的资源(集群或Atlas Data Lake);如果没有指定资源,则可以访问权限所有资源。强烈建议将数据库用户的访问权限权限限制为一设立有限的资源。

Name
类型
说明
必需

name

字符串

名称是用户有权访问权限的集群或Atlas Data Lake的 name

true

type

枚举

type类型是用户有访问权限的资源的 。枚举:CLUSTERDATA_LAKE

true

AtlasDatabaseUserStatus 定义了 AtlasProject 的观察到的状态

Name
类型
说明
必需

conditions

[]对象

条件是显示Atlas自定义资源当前状态的状态列表

true

name

字符串

UserName 是数据库用户的当前 name

false

observedGeneration

整型

ObservedGeneration 表示Atlas Operator 感知的资源规范的生成。 Atlas Operator 在开始资源协调后立即将该字段更新为“元数据生成”的值。格式:int64

false

passwordVersion

字符串

PasswordVersion 是Atlas Operator 已知的密码密钥的“ResourceVersion

false

条件描述了Atlas自定义资源在某一点的状态。

Name
类型
说明
必需

status

字符串

条件的状态; True、False、未知之一。

true

type

字符串

Atlas自定义资源条件的类型。

true

lastTransitionTime

字符串

上次条件从一种状态转换为另一种状态的时间。以ISO8601 格式表示。格式:日期-时间

false

message

字符串

提供有关转换的详细信息的 message

false

reason

字符串

条件的最后一次转换的 reason

false

后退

Atlas 部署

在此页面上