如何使用另一个项目中的服务帐户创建GKE [英] How to create GKE using a service account in another project
本文介绍了如何使用另一个项目中的服务帐户创建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屋!
查看全文