【问题标题】:Create cluster with Shared Network in GKE在 GKE 中使用共享网络创建集群
【发布时间】:2021-04-22 14:53:14
【问题描述】:

我正在尝试在 GKE 项目 1 中使用项目 2 的共享网络创建一个集群。

赋予服务帐户的角色:
project-1:Kubernetes Engine 集群管理员、计算网络管理员、Kubernetes Engine 主机服务代理用户
project-2:Kubernetes Engine Service Agent、Compute Network User、Kubernetes Engine Host Service Agent User

服务帐户在 project-1 下创建。 两个项目中都启用了 API 和服务。

但是我一直收到这个错误。 错误:googleapi:错误 403:Kubernetes Engine 服务代理缺少此项目所需的权限。请参阅故障排除 | Kubernetes 引擎文档 |谷歌云了解更多信息:“projects/project-2”需要“container.hostServiceAgent.use”权限。,禁止

data "google_compute_network" "shared_vpc" {
    name = "network-name-in-project-2"
    project = "project-2"
}

 
data "google_compute_subnetwork" "shared_subnet" {
    name = "subnet-name-in-project-2"
    project = "project-2"
    region = "us-east1"
}

 # cluster creation under project 1
 # project 1 specified in Provider 
resource "google_container_cluster" "mowx_cluster" {
    name = var.cluster_name
    location = "us-east1"
    initial_node_count = 1
 
    master_auth {
        username = ""
        password = ""
 
        client_certificate_config {
            issue_client_certificate = false
        }
    }
 
    remove_default_node_pool = true
    cluster_autoscaling {
        enabled = false
    }
 
    # cluster_ipv4_cidr = var.cluster_pod_cidr
    ip_allocation_policy {
        cluster_secondary_range_name = "pods"
        services_secondary_range_name = "svc"
    }
 
    network = data.google_compute_network.shared_vpc.id
    subnetwork = data.google_compute_subnetwork.shared_subnet.id
}

【问题讨论】:

  • 我认为您缺少的关键点:Kubernetes Engine 服务代理需要权限。这是分配给 Google Cloud 服务的一种特殊类型的服务帐号。
  • 我在项目2下添加了项目1的服务账号(名称为Google APIs Service Agent),并赋予了这两个角色。 1. 计算网络用户 2. Kubernetes Engine 主机服务代理用户,但我仍然收到错误。
  • 在哪里可以找到或创建“项目 1 的 Kubernetes Engine 服务代理”?项目 1 IAM 下只有两个自动生成服务帐号: 1. Compute Engine 默认服务帐号 2. Google APIs 服务代理
  • 服务帐户列在 IAM -> 服务帐户下。要更改服务代理的角色,有时您必须手动将服务代理电子邮件地址添加到 IAM。文档对此进行了详细讨论。
  • 因此,只有当您通过 gcloud 命令创建 gke 集群时,它才会自动创建“项目 1 的 Kubernetes Engine 服务代理”。然后就可以使用 terraform 创建集群了。

标签: kubernetes networking google-cloud-platform terraform-provider-gcp


【解决方案1】:

这是一个基于 cmets 讨论的社区 wiki 答案,并发布以提高可见性。随意扩展它。

你遇到的错误:

Error: googleapi: Error 403: Kubernetes Engine Service Agent is missing required permissions on this project. See Troubleshooting | Kubernetes Engine Documentation | Google Cloud for more info: required “container.hostServiceAgent.use” permission(s) for “projects/project-2”., forbidden

表示未创建必要的服务代理:

roles/container.serviceAgent - Kubernetes Engine 服务代理:

授予 Kubernetes Engine 帐号管理集群资源的权限。 包括对服务帐户的访问。

官方troubleshooting docs描述了针对此类问题的解决方案:

要解决此问题,如果您已从 Google Kubernetes Engine 服务帐号中删除了 Kubernetes Engine Service Agent 角色, 添加回来。否则,您必须重新启用 Kubernetes Engine API, 这将正确恢复您的服务帐户和权限。 您可以在 gcloud 工具或 Cloud Console 中执行此操作。

上述解决方案在您的用例中有效,因为帐户丢失,因此必须(重新)创建。

【讨论】:

    猜你喜欢
    • 2020-09-15
    • 2020-08-11
    • 1970-01-01
    • 1970-01-01
    • 2020-01-13
    • 2020-01-30
    • 1970-01-01
    • 2020-08-20
    • 2022-06-17
    相关资源
    最近更新 更多