如何使用另一个项目中的服务帐户创建GKE [英] How to create GKE using a service account in another project

查看:21
本文介绍了如何使用另一个项目中的服务帐户创建GKE的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个项目A,我在其中创建了一个服务帐户。 我想在项目B中创建一个GKE。

我按照此处列出的服务帐户模拟步骤https://cloud.google.com/iam/docs/impersonating-service-accounts

在项目A中, 在我创建的服务帐户my-service-account上,项目B的默认服务帐户有Roles/iam.serviceAccountTokenCreator和Roles/iam.serviceAccountUser

在项目B中, my-service-account具有Kubernetes管理员角色

当我尝试创建时,最终出现错误

Error: Error waiting for creating GKE NodePool: All cluster resources were brought up, but: only 0 nodes out of 1 have registered; cluster may be unhealthy.

我正在使用Terraform创建此群集,而Terraform使用的服务帐户具有Kubernetes admin和服务帐户用户角色。

这是它在控制台中显示的内容 GKE error

编辑:

我尝试使用Gcloud命令行创建GKE

gcloud beta container --project "my-project" clusters create "test-gke-sa" --zone "us-west1-a" --no-enable-basic-auth --cluster-version "1.18.16-gke.502" --release-channel "regular" --machine-type "e2-standard-16" --image-type "COS" --disk-type "pd-standard" --disk-size "100" --metadata disable-legacy-endpoints=true --scopes "https://www.googleapis.com/auth/devstorage.read_only","https://www.googleapis.com/auth/logging.write","https://www.googleapis.com/auth/monitoring","https://www.googleapis.com/auth/servicecontrol","https://www.googleapis.com/auth/service.management.readonly","https://www.googleapis.com/auth/trace.append" --num-nodes "3" --enable-stackdriver-kubernetes --enable-private-nodes --master-ipv4-cidr "192.168.0.16/28" --enable-ip-alias --network "projects/infgprj-sbo-n-hostgs-gl-01/global/networks/my-network" --subnetwork "projects/my-network/regions/us-west1/subnetworks/my-subnetwork" --cluster-secondary-range-name "gke1-pods" --services-secondary-range-name "gke1-services" --default-max-pods-per-node "110" --no-enable-master-authorized-networks --addons HorizontalPodAutoscaling,HttpLoadBalancing,GcePersistentDiskCsiDriver --enable-autoupgrade --enable-autorepair --max-surge-upgrade 1 --max-unavailable-upgrade 0 --enable-shielded-nodes --shielded-secure-boot --node-locations "us-west1-a" --service-account="my-service-account@project-a.iam.gserviceaccount.com"

收到相同的错误。 我看到创建了节点池,但没有创建节点。(或者至少它们没有连接到节点池?)

这里有更多错误图片

VM页面

GKE页面

解决方案:最后,我想出了问题所在。我已将令牌创建者角色仅分配给默认服务帐户。当我也将相同的角色赋予默认服务代理时,它开始工作。所以基本上

role = "roles/iam.serviceAccountTokenCreator",
members = [
        "serviceAccount:{project-number}-compute@developer.gserviceaccount.com",
        "serviceAccount:service-{project-number}@container-engine-robot.iam.gserviceaccount.com",
        "serviceAccount:service-{project-number}@compute-system.iam.gserviceaccount.com",
      ]

推荐答案

通常上述错误可能是由于以下原因造成的

1]如果是共享vPC,请验证IAM permissions是否正确。

2]验证是否创建了自动生成的入口防火墙规则

  • 通常创建三个防火墙规则

    • GKE-${CLUSTER_NAME}-${RANDOM_CHAR}-ALL:Pod到Pod通信的防火墙规则

    • gke-${cluster_name}-${random_char}-master:主机与节点对话的规则

    • GKE-${CLUSTER_NAME}-${RANDOM_CHAR}-VMS:节点到节点通信

随机字符:随机字符

3]检查拒绝出口的防火墙规则。

默认情况下,GCP创建允许所有出口的防火墙规则。如果删除规则或拒绝所有出口,则必须配置允许主CIDR挡路上通过tcp端口443、10250出口的防火墙规则。内网集群防火墙规则Private Cluster Firewall Rules说明如何获取主CIDR挡路

-如果启用其他GKE加载项,可能需要添加其他出口防火墙规则。

4]检查DNS配置以与Google API通信。

利用Kubelet logs检查任何cURL失败的请求。例如:在kubelet安装期间无法解决主机或连接超时。DNS配置可能不正确(例如解析私有Google API或点击公共Google API)。挖洞命令或查看dns服务器的"etc/Resolution v.conf"应确认请求被路由到的位置。

这篇关于如何使用另一个项目中的服务帐户创建GKE的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆