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 集群数据库。
以下示例将创建一个密钥:
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
默认下, 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: 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
具有范围的数据库用户
以下示例显示了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 身份验证的数据库用户
以下示例显示了采用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
使用AmazonAmazon Web Services Web Services 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
AtlasDatabaseUser 是Atlas Database User API的模式
Name | 类型 | 说明 | 必需 |
|---|---|---|---|
| 字符串 | atlas.mongodb.com/v1 | true |
| 字符串 |
| true |
| 对象 | 有关 | true |
| 对象 |
| false |
| 对象 |
| false |
AtlasDatabaseUser.spec
AtlasDatabaseUserSpec 定义了Atlas中 Database User 的目标状态
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 |
| 枚举 | X509 Type 是指数据库对所提供的用户名进行身份验证时使用的 X.509 方法。枚举: | false |
AtlasDatabaseUser.spec.roles
RoleSpec 允许用户对指定数据库执行特定操作。管理员数据库上的角色可以包括也应用于其他数据库的特权。
Name | 类型 | 说明 | 必需 |
|---|---|---|---|
| 字符串 |
| true |
| 字符串 |
| true |
| 字符串 |
| false |
AtlasDatabaseUser.spec.connectionSecret
包含Atlas API私钥和公钥的密钥名称。
AtlasDatabaseUser.spec.externalProjectRef
externalProjectRef 保存父Atlas项目ID。与 "projectRef"字段互斥。
Name | 类型 | 说明 | 必需 |
|---|---|---|---|
| 字符串 |
| true |
AtlasDatabaseUser.spec.labels
LabelSpec 包含用于标签和分类 Cluster/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 |