Crossplane configuration
Crossplane configuration
Crossplane 后,必须对其进行配置以供使用. 配置 Crossplane 的过程包括:
- Configure RBAC permissions.
- .
- Configure managed service access.
- .
- Use Auto DevOps configuration options.
- .
为了允许 Crossplane 设置诸如 PostgreSQL 之类的云服务,必须使用用户帐户配置云提供商堆栈. 例如:
- GCP 的服务帐户.
- AWS 的 IAM 用户.
一些重要的注意事项:
- 本指南以 GCP 为例,但 AWS 和 Azure 的过程相似.
- Crossplane 要求 Kubernetes 集群是启用了 Alias IP 的 VPC 本机,因此可以在 GCP 网络内路由 Pod 的 IP 地址.
首先,使用配置声明一些环境变量以供本指南使用:
对于由 GitLab 管理的群集,将自动配置基于角色的访问控制(RBAC).
对于非 GitLab 管理的群集,请确保提供的令牌的服务帐户可以管理 API 组中的资源:
将以下 YAML 保存为
crossplane-database-role.yaml
:apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: crossplane-database-role
rbac.authorization.k8s.io/aggregate-to-edit: "true"
rules:
- apiGroups:
- database.crossplane.io
resources:
- postgresqlinstances
verbs:
- get
- list
- create
- update
- delete
- patch
- watch
-
kubectl apply -f crossplane-database-role.yaml
Configure Crossplane with a cloud provider
请参阅以使用用户帐户配置已安装的云提供商堆栈.
注意:必须将 Secret 和引用该 Secret 的 Provider 资源应用于指南中的gitlab-managed-apps
命名空间. 请确保在执行该过程时进行更改.
接下来,通过以下任一方法配置 PostgreSQL 数据库和 GKE 集群之间的连接:
- 如下所示使用 Crossplane.
- Directly in the GCP console by configuring private services access.
运行以下命令,这将创建一个
network.yaml
文件,并配置和连接资源:使用以下命令应用文件中指定的设置:
kubectl apply -f network.yaml
验证网络资源的创建,以及两个资源均已准备就绪并已同步.
kubectl describe connection.servicenetworking.gcp.crossplane.io gitlab-ad-connection
kubectl describe globaladdress.compute.gcp.crossplane.io gitlab-ad-globaladdress
Setting up Resource classes
使用资源类为所需的托管服务定义配置. 这个例子定义了 PostgreSQL Resource 类:
使用以下命令应用资源类配置:
kubectl apply -f gcp-postgres-standard.yaml
使用以下命令验证 Resource 类的创建:
资源类使您可以定义托管服务的服务类. 我们可以创建另一个CloudSQLInstanceClass
,以请求更大或更快速的磁盘. 它还可以请求特定版本的数据库.
您可以使用以下任一选项来运行 Auto DevOps 管道:
- 设置环境变量
AUTO_DEVOPS_POSTGRES_MANAGED
和AUTO_DEVOPS_POSTGRES_MANAGED_CLASS_SELECTOR
以使用 Crossplane 设置 PostgreSQL. - 舵图的替代值:
- 将
postgres.managed
设置为true
,这将选择默认资源类. 用注释resourceclass.crossplane.io/is-default-class: "true"
标记资源类resourceclass.crossplane.io/is-default-class: "true"
. CloudSQLInstanceClasscloudsqlinstancepostgresql-standard-default
用于满足声明. - 使用
postgres.managedClassSelector
将postgres.managed
设置为true
,以根据标签提供要选择的资源类. 在这种情况下,postgres.managedClassSelector.matchLabels.gitlab-ad-demo="true"
选择 CloudSQLInstance 类cloudsqlinstancepostgresql-standard
以满足声明请求.
- 将
Auto DevOps 管道在成功运行时应预配一个 PostgresqlInstance.
要验证已创建 PostgreSQL 实例,请运行此命令. 当 PostgresqlInstance 的STATUS
字段更改为BOUND
,它已成功配置:
PostgreSQL 实例的端点和用户凭据位于同一项目名称空间内的一个名为app-postgres
的秘密中. 您可以使用以下命令来验证机密:
Name: app-postgres
Namespace: xp-ad-demo-24-staging
Labels: <none>
Annotations: crossplane.io/propagate-from-name: 108e460e-06c7-11ea-b907-42010a8000bd
crossplane.io/propagate-from-namespace: gitlab-managed-apps
crossplane.io/propagate-from-uid: 10c79605-06c7-11ea-b907-42010a8000bd
Type: Opaque
Data
====
privateIP: 8 bytes
publicIP: 13 bytes
serverCACertificateCert: 1272 bytes
serverCACertificateCertSerialNumber: 1 bytes
serverCACertificateCreateTime: 24 bytes
serverCACertificateExpirationTime: 24 bytes
username: 8 bytes
endpoint: 8 bytes
password: 27 bytes
serverCACertificateCommonName: 98 bytes
serverCACertificateInstance: 41 bytes