几个月来,我们一直致力于使用 SharedVPC 在 Google Cloud 中为所有项目创建内部网络,并且在分配给每个项目的不同子网下设置计算实例时没有遇到任何问题。
然而,当我们尝试创建 Kubernetes 集群时,问题出现了。由于某种原因,当我们尝试这样做时,我们收到以下错误:
错误 403:Google Compute Engine:‘projects/host-project/global/networks/subnet-required’ 需要‘compute.networks.get’权限
我检查了所有适当的权限是否按照 Google 的GKE 使用 SharedVPC示例文档,甚至重新启用了 API 并从头开始设置文档中建议的权限。但问题似乎仍然存在。
尝试部署集群的命令是:
gcloud container clusters create test \
--project <target-project> \
--zone=us-east1-c \
--enable-ip-alias \
--network projects/<host-project>/global/networks/<vpc-network> \
--subnetwork projects/<host-project>/regions/us-east1/subnetworks/<subnet-required> \
--cluster-secondary-range-name k8s-cluster-range \
--services-secondary-range-name k8s-services-range
容器引擎和计算引擎 API 服务帐户已被授予角色/compute.networkUser 和角色/container.hostServiceAgentUser,如文档中所述。
有谁发现过这个问题或者知道是什么原因导致了这个错误?
谢谢!
答案1
这花了一些时间,因为我已经尝试寻找解决这个问题的方法好几天了,但似乎我终于找到了解决这个问题所需的东西。
我发现gcloud beta container subnets list-usable --project <client-project> --network-project <host-project>
显示子网可用,但没有显示其中定义的次要范围,还显示了另一个 403 错误。掌握这些信息后,我再次检查了 API,看看它们是否存在问题,即使之前已禁用并启用它们。
看起来gcloud services enable container.googleapis.com --project <host-project>
应该创建 Kubernetes Engine API 服务帐户的 并没有按预期运行,也没有创建服务帐户。
有趣的是,当从命令行禁用并再次启用 Kubernetes Engine API 时,它也没有创建服务帐户。我解决这个问题的唯一方法是通过控制台启用 API完成后服务帐户就创建成功了。
通过在宿主项目中创建的服务帐户,客户项目的服务帐户可以顺利访问宿主项目。
希望如果有人再次发现这个问题,他们就能在这里找到解决方案!