Crossplane、GCP 和compute.subnetworks.get

问题描述 投票:0回答:1

因此,我尝试将 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

我已经在这上面花费了两天的大部分时间,并且对我错过的可能是一件简单的事情感到相当沮丧。谁能帮我指出我缺少什么吗?

google-cloud-platform google-kubernetes-engine google-vpc gke-networking crossplane
1个回答
0
投票

此错误表示 Compute Engine 默认服务帐号、Google API 服务代理或与 GKE 关联的服务帐号已被手动删除或编辑。

尝试以下故障排除步骤可能会解决问题:

  • 确保在主机和服务项目上启用 Google Kubernetes API 或重新启用它(禁用并再次启用)

  • 确保已将正确的 IAM 权限应用于服务账户。

    • 将服务项目的 kubernetes 服务帐户 (service-PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com) 添加到宿主项目。

    • 将 Kubernetes Engine 服务代理角色添加到此帐户。

    • 将计算网络用户角色添加到此帐户。

有关详细信息,请参阅帐户缺少编辑权限

© www.soinside.com 2019 - 2024. All rights reserved.