Crossplane configuration

Crossplane configuration

Crossplane 后,必须对其进行配置以供使用. 配置 Crossplane 的过程包括:

  1. Configure RBAC permissions.
  2. .
  3. Configure managed service access.
  4. .
  5. Use Auto DevOps configuration options.
  6. .

为了允许 Crossplane 设置诸如 PostgreSQL 之类的云服务,必须使用用户帐户配置云提供商堆栈. 例如:

  • GCP 的服务帐户.
  • AWS 的 IAM 用户.

一些重要的注意事项:

  • 本指南以 GCP 为例,但 AWS 和 Azure 的过程相似.
  • Crossplane 要求 Kubernetes 集群是启用了 Alias IP 的 VPC 本机,因此可以在 GCP 网络内路由 Pod 的 IP 地址.

首先,使用配置声明一些环境变量以供本指南使用:

对于由 GitLab 管理的群集,将自动配置基于角色的访问控制(RBAC).

对于非 GitLab 管理的群集,请确保提供的令牌的服务帐户可以管理 API 组中的资源:

  1. 将以下 YAML 保存为crossplane-database-role.yaml

    1. apiVersion: rbac.authorization.k8s.io/v1
    2. kind: ClusterRole
    3. metadata:
    4. name: crossplane-database-role
    5. rbac.authorization.k8s.io/aggregate-to-edit: "true"
    6. rules:
    7. - apiGroups:
    8. - database.crossplane.io
    9. resources:
    10. - postgresqlinstances
    11. verbs:
    12. - get
    13. - list
    14. - create
    15. - update
    16. - delete
    17. - patch
    18. - watch
    1. kubectl apply -f crossplane-database-role.yaml

Configure Crossplane with a cloud provider

请参阅以使用用户帐户配置已安装的云提供商堆栈.

注意:必须将 Secret 和引用该 Secret 的 Provider 资源应用于指南中的gitlab-managed-apps命名空间. 请确保在执行该过程时进行更改.

接下来,通过以下任一方法配置 PostgreSQL 数据库和 GKE 集群之间的连接:

  1. 运行以下命令,这将创建一个network.yaml文件,并配置和连接资源:

  2. 使用以下命令应用文件中指定的设置:

    1. kubectl apply -f network.yaml
  3. 验证网络资源的创建,以及两个资源均已准备就绪并已同步.

    1. kubectl describe connection.servicenetworking.gcp.crossplane.io gitlab-ad-connection
    2. kubectl describe globaladdress.compute.gcp.crossplane.io gitlab-ad-globaladdress

Setting up Resource classes

使用资源类为所需的托管服务定义配置. 这个例子定义了 PostgreSQL Resource 类:

  1. 使用以下命令应用资源类配置:

    1. kubectl apply -f gcp-postgres-standard.yaml
  2. 使用以下命令验证 Resource 类的创建:

    资源类使您可以定义托管服务的服务类. 我们可以创建另一个CloudSQLInstanceClass ,以请求更大或更快速的磁盘. 它还可以请求特定版本的数据库.

    您可以使用以下任一选项来运行 Auto DevOps 管道:

    • 设置环境变量AUTO_DEVOPS_POSTGRES_MANAGEDAUTO_DEVOPS_POSTGRES_MANAGED_CLASS_SELECTOR以使用 Crossplane 设置 PostgreSQL.
    • 舵图的替代值:
      • postgres.managed设置为true ,这将选择默认资源类. 用注释resourceclass.crossplane.io/is-default-class: "true"标记资源类resourceclass.crossplane.io/is-default-class: "true" . CloudSQLInstanceClass cloudsqlinstancepostgresql-standard-default用于满足声明.
      • 使用postgres.managedClassSelectorpostgres.managed设置为true ,以根据标签提供要选择的资源类. 在这种情况下, postgres.managedClassSelector.matchLabels.gitlab-ad-demo="true"选择 CloudSQLInstance 类cloudsqlinstancepostgresql-standard以满足声明请求.

    Auto DevOps 管道在成功运行时应预配一个 PostgresqlInstance.

    要验证已创建 PostgreSQL 实例,请运行此命令. 当 PostgresqlInstance 的STATUS字段更改为BOUND ,它已成功配置:

    PostgreSQL 实例的端点和用户凭据位于同一项目名称空间内的一个名为app-postgres的秘密中. 您可以使用以下命令来验证机密:

    1. Name: app-postgres
    2. Namespace: xp-ad-demo-24-staging
    3. Labels: <none>
    4. Annotations: crossplane.io/propagate-from-name: 108e460e-06c7-11ea-b907-42010a8000bd
    5. crossplane.io/propagate-from-namespace: gitlab-managed-apps
    6. crossplane.io/propagate-from-uid: 10c79605-06c7-11ea-b907-42010a8000bd
    7. Type: Opaque
    8. Data
    9. ====
    10. privateIP: 8 bytes
    11. publicIP: 13 bytes
    12. serverCACertificateCert: 1272 bytes
    13. serverCACertificateCertSerialNumber: 1 bytes
    14. serverCACertificateCreateTime: 24 bytes
    15. serverCACertificateExpirationTime: 24 bytes
    16. username: 8 bytes
    17. endpoint: 8 bytes
    18. password: 27 bytes
    19. serverCACertificateCommonName: 98 bytes
    20. serverCACertificateInstance: 41 bytes

    Connect to the PostgreSQL instance