kubernetes 在GKE中使用共享网络创建集群

nqwrtyyt  于 2023-03-29  发布在  Kubernetes
关注(0)|答案(3)|浏览(126)

我正在尝试在GKE project-1中创建一个与project-2共享网络的集群。
分配给服务帐户的角色:
project-1:Kubernetes Engine Cluster Admin,Compute Network Admin,Kubernetes Engine Host Service Agent User
project-2:Kubernetes Engine Service Agent,Compute Network User,Kubernetes Engine Host Service Agent User
服务帐户在项目-1下创建。在两个项目中均启用了API和服务。
但是我总是得到这个错误。错误:403:您访问的页面不存在Kubernetes Engine Service Agent缺少此项目所需的权限。请参阅故障排除|Kubernetes发动机文档|Google Cloud了解更多信息:“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
}
ee7vknir

ee7vknir1#

这是一个基于评论中讨论的社区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 Service Agent:
授予Kubernetes Engine帐户访问权限以管理集群资源。包括对服务帐户的访问权限。
官方故障排除文档描述了此类问题的解决方案:
要解决此问题,如果您已从Google Kubernetes Engine服务帐户中删除Kubernetes Engine Service Agent角色,请将其添加回来。否则,您必须重新启用Kubernetes Engine API,这将正确恢复您的服务帐户和权限。您可以在gcloud工具或Cloud Console中执行此操作。
上述解决方案的工作原理是,在您的用例中,帐户丢失,因此必须(重新)创建。

fcy6dtqo

fcy6dtqo2#

对我来说,即使gke服务帐户存在,并且在服务和主机项目中都有Kubernetes Engine Host Service AgentKubernetes Engine Service Agent角色,我仍然得到了443错误。
问题是服务帐户需要将roles/compute.networkUserroles/compute.instanceAdmin应用于VPC的子网绑定。
参见:资源google_compute_subnetwork_iam_binding另见module "shared_vpc_access"

qhhrdooz

qhhrdooz3#

我为解决同一问题所遵循的步骤:

服务项目层面:

1.检查Host和Service项目是否都启用了Kubernetes Engine API
1.通过单击Google IAM控制台右上角的Include Google-provided role grants选项,检查是否创建了两个服务帐户

  1. GKE服务访问(service-SERVICE_PROJECT_NUM@container-engine-robot.iam.gserviceaccount.com
  2. Google API服务访问权限(SERVICE_PROJECT_NUM@cloudservices.gserviceaccount.com
宿主项目级别:

1.授予roles/container.hostServiceAgentUserroles/compute.networkUser角色上面所示的GKE服务访问权限
1.授予上面显示的roles/compute.networkUser角色的Google API服务访问权限
这将允许Kubernetes Engine服务帐户在主机项目级别为服务项目中创建的集群配置共享网络资源
注意:IAM角色绑定也可以在子网级权限上添加

相关问题