因此,我尝试将 Crossplane 与provider-family-gcp 结合使用来创建 GKE 集群。
apiVersion: container.gcp.upbound.io/v1beta1
kind: Cluster
metadata:
name: workload-cluster-yuan
spec:
forProvider:
enableAutopilot: true
ipAllocationPolicy:
- clusterSecondaryRangeName: rn-cd-shared-base-europe-west1-gke-pod
servicesSecondaryRangeName: rn-cd-shared-base-europe-west1-gke-svc
location: europe-west1
network: projects/prj-d-shared-base-v0pj/global/networks/vpc-cd-shared-base
project: prj-d-yuan-ez0z
subnetwork: >-
projects/prj-d-shared-base-v0pj/regions/europe-west1/subnetworks/sb-cd-shared-base-europe-west1
我现有的运行 Crossplane 的 GKE 集群是一个新创建的自动驾驶集群,因此具有内置的工作负载身份设置,这样我可以将角色直接绑定到 kubernetes 服务帐户,而无需将它们绑定到 GCP SA。事实证明,这对于很多事情来说都是完美的。该集群也使用共享 VPC。
不过,我目前在与 crossplane 相同的共享 VPC 中的子网上使用了compute.subnetworks.get。
Status:
At Provider:
Conditions:
Last Transition Time: 2024-07-12T14:50:46Z
Reason: Creating
Status: False
Type: Ready
Last Transition Time: 2024-07-12T14:50:47Z
Message: create failed: async create failed: failed to create the resource: [{0 googleapi: Error 403: Google Compute Engine: Required 'compute.subnetworks.get' permission for 'projects/prj-d-shared-base-v0pj/regions/europe-west1/subnetworks/sb-cd-shared-base-europe-west1'.
Details:
[
{
"@type": "type.googleapis.com/google.rpc.RequestInfo",
"requestId": "0x5c7fe6ea1881ff0"
}
]
, forbidden []}]
Reason: ReconcileError
Status: False
Type: Synced
Last Transition Time: 2024-07-12T14:50:47Z
Message: async create failed: failed to create the resource: [{0 googleapi: Error 403: Google Compute Engine: Required 'compute.subnetworks.get' permission for 'projects/prj-d-shared-base-v0pj/regions/europe-west1/subnetworks/sb-cd-shared-base-europe-west1'.
Details:
[
{
"@type": "type.googleapis.com/google.rpc.RequestInfo",
"requestId": "0x5c7fe6ea1881ff0"
}
]
, forbidden []}]
Reason: AsyncCreateFailure
Status: False
Type: LastAsyncOperation
prj-d-shared-base-v0pj
是一个主机项目,其中的子网与我的服务项目共享(它恰好不同,但仍然共享到现有集群运行的服务项目)。
prj-d-shared-base-v0pj
子网共享到“crossplane-cluster-project”,prj-d-shared-base-v0pj
子网共享到“crossplane-created-project”。
跨平面集群项目服务帐户(
<number>@cloudservices.gserviceaccount.com
、project-service-account@<id>.iam.gserviceaccount.com
和service-<number>@container-engine-robot.iam.gserviceaccount.com
)以及跨平面计算和容器提供商 pod SA 的工作负载身份主体(我将各个跨平面提供商 pod 作为专门命名的 SA 运行),都具有roles/compute.networkUser
绑定到子网。
跨平面容器提供商 pod SA 的工作负载身份主体在主机项目和两个服务项目上也有
roles/compute.networkUser
。
我已经在这上面花费了两天的大部分时间,并且对我错过的可能是一件简单的事情感到相当沮丧。谁能帮我指出我缺少什么吗?
此错误表示 Compute Engine 默认服务帐号、Google API 服务代理或与 GKE 关联的服务帐号已被手动删除或编辑。
尝试以下故障排除步骤可能会解决问题:
确保在主机和服务项目上启用 Google Kubernetes API 或重新启用它(禁用并再次启用)
确保已将正确的 IAM 权限应用于服务账户。
将服务项目的 kubernetes 服务帐户 (service-PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com) 添加到宿主项目。
将 Kubernetes Engine 服务代理角色添加到此帐户。
将计算网络用户角色添加到此帐户。
有关详细信息,请参阅帐户缺少编辑权限