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 执行以下操作之一:
创建新的数据库用户。
更新现有用户。
在创建数据库用户之前,您必须使用单个 字段创建不透明密钥,以日志Atlas password集群数据库。
以下示例将创建一个密钥:
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 | 说明 |
|---|---|
| 公共 |
| 公共 |
| 标识数据库用户的名称。 |
| 数据库用户的密码。 |
在 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
By default, Atlas Kubernetes Operator creates the database user connection secret for each cluster in the same project that the AtlasDatabaseUser references. You can change this behavior with the spec.scopes parameter. This parameter restricts the clusters where the database user gets created. The name of the connection secret uses the following format: <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: 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-theuserp1-gcp-cluster-theuser
具有范围的数据库用户
The following example shows an AtlasDatabaseUser custom resource specification with spec.scopes set to the Google Cloud cluster only:
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 进行身份验证的数据库用户
以下示例显示了使用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数据库用户 是 Atlas Database User API 的模式
Name | 类型 | 说明 | 必需 |
|---|---|---|---|
| 字符串 | atlas.mongodb.com/v1 | true |
| 字符串 |
| true |
| 对象 | 有关 | true |
| 对象 |
| false |
| 对象 |
| false |
AtlasDatabaseUser.spec
AtlasDatabaseUserSpec 定义了 Atlas 中数据库用户的目标状态
Name | 类型 | 说明 | 必需 |
|---|---|---|---|
| []对象 | Roles 是一个大量,其中包含此用户的 | true |
| 字符串 | 用户名是一个 | true |
| 枚举 | 人类可读标签,用于指示新数据库用户是否通过Amazon Web Services ( | false |
| 对象 | 包含Atlas | false |
| 字符串 |
| false |
| 字符串 |
| false |
| 字符串 | 此数据库用户的说明。最多 100 个字符。 | false |
| 对象 |
| false |
| []对象 | Labels 是一个数组,包含用于标签和分类数据库用户的键值对。每个键和值的最大长度为 255 个字符。 | false |
| 枚举 | 人类可读标签,指示新数据库用户名是否采用 | false |
| 对象 |
| false |
| 对象 |
| false |
| []对象 | 作用域是该用户有权访问的集群和Atlas data lake的数组。 | false |
| 枚举 | X509Type 是指数据库对所提供的用户名进行身份验证时使用的 X.509 方法。枚举: | false |
AtlasDatabaseUser.spec.角色
RoleSpec 允许用户对指定数据库执行特定操作。管理员数据库上的角色可以包括也应用于其他数据库的权限。
Name | 类型 | 说明 | 必需 |
|---|---|---|---|
| 字符串 |
| true |
| 字符串 |
| true |
| 字符串 |
| false |
AtlasDatabaseUser.spec.connectionSecret
包含Atlas API私钥和公钥的密钥名称。
Name | 类型 | 说明 | 必需 |
|---|---|---|---|
| 字符串 | true |
AtlasDatabaseUser.spec.externalProjectRef
externalProjectRef 保存父Atlas群组 ID(group ID)。与 "projectRef"字段互斥。
Name | 类型 | 说明 | 必需 |
|---|---|---|---|
| 字符串 |
| true |
AtlasDatabaseUser.spec.labels
LabelSpec 包含用于标签和分类 集群/DBUser 的键值对
Name | 类型 | 说明 | 必需 |
|---|---|---|---|
| 字符串 | 用于标签和分类该组件的键。 | true |
| 字符串 | 设立为用于标签和分类该组件的键的值。 | true |
AtlasDatabaseUser.spec.passwordSecretRef
PasswordSecret 是对保存用户密码的 Secret 的引用。
Name | 类型 | 说明 | 必需 |
|---|---|---|---|
| 字符串 | 名称是Kubernetes资源的 | true |
AtlasDatabaseUser.spec.projectRef
projectRef 是对父 AtlasProject资源的引用。与 "externalProjectRef"字段互斥。
Name | 类型 | 说明 | 必需 |
|---|---|---|---|
| 字符串 | Kubernetes资源名称 | true |
| 字符串 | Kubernetes资源的命名空间 | false |
AtlasDatabaseUser.spec.scopes
ScopeSpec 如果存在,则数据库用户只能访问指定的资源(集群或Atlas Data Lake);如果没有指定资源,则可以访问所有资源。强烈建议将数据库用户的访问权限权限限制为一设立有限的资源。
Name | 类型 | 说明 | 必需 |
|---|---|---|---|
| 字符串 | 名称是用户有权访问权限的集群或Atlas Data Lake的 | true |
| 枚举 | 类型是用户有访问权限的资源的 | true |
AtlasDatabaseUser.status
AtlasDatabaseUserStatus 定义了 AtlasProject 的观察到的省/市/自治区
Name | 类型 | 说明 | 必需 |
|---|---|---|---|
| []对象 | 条件是显示Atlas自定义资源当前省/市/自治区的列表 | true |
| 字符串 |
| false |
| 整型 |
| false |
| 字符串 |
| false |
AtlasDatabaseUser.status.conditions
条件描述了Atlas自定义资源在某一点的省/市/自治区。
Name | 类型 | 说明 | 必需 |
|---|---|---|---|
| 字符串 | 条件的状态; True、False、未知之一。 | true |
| 字符串 | Atlas自定义资源条件的类型。 | true |
| 字符串 | 上次条件从一种状态转换为另一种状态的时间。以 | false |
| 字符串 | 提供有关转换的详细信息的 | false |
| 字符串 | 条件的最后一次转换的 | false |