使用Terraform将Helm部署到GKE时经常出错

时间:2020-05-30 17:22:43

标签: terraform kubernetes-helm

组件

  1. GKE
  2. 头盔v3
  3. 地形

注意:出现以下错误,但是如果我多次执行terraform apply/delete,它将以某种方式自动解决。我正在使用Google Cloud Console,所以我的互联网不会混乱。

错误类型1

错误:读取ComputeNetwork“ projects / foo / global / networks / bar-network”时出错:获取https://www.googleapis.com/compute/v1/projects/foo/global/networks/bar-network-e4l6-network?alt=json:拨打tcp [1111:2222:4003:c03 :: 5f]:443:连接:无法分配要求的地址

错误类型2

读取服务帐户“ projects/foo/serviceAccounts/bar-sa@foo.iam.gserviceaccount.com”时出错:获取https://iam.googleapis.com/v1/projects/foo/serviceAccounts/example-cluster-sa@dravoka2.iam.gserviceaccount.com?alt=json&prettyPrint=false:拨打tcp [1111:2222:4003:c04 :: 5f]:443 :连接:无法分配请求的地址

错误类型3

错误:检索可用的容器群集版本时出错:获取https://container.googleapis.com/v1beta1/projects/foo/locations/us-central1-c/serverConfig?alt=json&prettyPrint=false:拨打tcp [1111:2222:4003:c03 :: 5f]:443:连接:无法分配请求的地址

错误类型4

读取实例组管理器作为实例组URL返回的错误:“ googleapi:错误404:资源'projects / foo / zones / us-central1-c / instanceGroupManagers / gke-bar-main-pool-8c2b8edd-grp'未找到,未找到”

我不明白为什么它会随机弹出,并且当我重新运行相同的地形时,应用/删除它会神奇地正常工作!

任何指导都会有所帮助。

1 个答案:

答案 0 :(得分:1)

我也遇到了同样的问题,经过几个小时的详细研究-我想我知道发生了什么以及如何解决。自实施以下解决方法以来,我在应用/销毁操作中获得了100%的成功率。

问题:

由于某种原因,Terraform正在接受A记录之上的AAAA(IPv6)记录。您可以在错误响应中看到此内容,因为* .googleapis.com的记录是IPv6地址。由于Google Cloud Console未启用IPv6,因此这就是您收到此错误的原因。看来这是Go的问题,而不是基于我对类似错误的搜索得出的Terraform本身。

解决方案:

简短地更改Terraform中的源代码,您可以改为修改/ etc / hosts文件以对每个API Terraform调用使用IPv4地址进行响应。由于Cloud Shell托管在Google Cloud上,因此您可以使用private.googleapis.com范围(199.36.153.8/30)。要自动执行此操作,只需将以下内容放在主目录中的.customize_environment文件中:

export APIS="googleapis.com www.googleapis.com storage.googleapis.com iam.googleapis.com container.googleapis.com cloudresourcemanager.googleapis.com"
for i in $APIS
do
  echo "199.36.153.10 $i" >> /etc/hosts
done

作为参考,我创建了一个issue in the Google provider进行跟踪。