【问题标题】:Frequent Error when deploying Helm to GKE with Terraform使用 Terraform 将 Helm 部署到 GKE 时经常出错
【发布时间】:2020-09-18 05:09:53
【问题描述】:

组件

  1. GKE
  2. Helm v3
  3. 地形

注意:出现以下错误,但如果我继续多次执行terraform apply/delete,它会以某种方式自动解决。我正在使用谷歌云控制台,所以我的互联网不会搞砸。

错误类型 1:

错误:读取 ComputeNetwork "projects/foo/global/networks/bar-network" 时出错:Get https://www.googleapis.com/compute/v1/projects/foo/global/networks/bar-network-e4l6-network?alt=json: dial tcp [1111:2222:4003:c03::5f]:443: connect: cannot assign requested address

错误类型 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:

错误:检索可用容器集群版本时出错:Get https://container.googleapis.com/v1beta1/projects/foo/locations/us-central1-c/serverConfig?alt=json&prettyPrint=false: dial tcp [1111:2222:4003:c03::5f]:443: connect: cannot assign requested address

错误类型 4:

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

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

任何指导都会有所帮助。

【问题讨论】:

    标签: terraform kubernetes-helm


    【解决方案1】:

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

    问题:

    出于某种原因,Terraform 接受 AAAA (IPv6) 记录而不是 A 记录。您可以在错误响应中看到这一点,因为 *.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 来跟踪它。

    【讨论】:

    • 您的意思是? 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 对我来说 216.58.212.164 工作
    • @IddanAaronsohn 您在示例中使用的是 Google Cloud Shell 吗?因为如果您使用 Cloud Shell 并将其放在您的 .customize_environment 文件中,它就可以工作。 216.58.212.164 是一个临时 IP,可能会改变,所以我不会依赖这个。如果您确实在非云 shell 上,更好的方法是将 DNS 配置为根本不返回 AAAA 记录。
    • 在最糟糕的时候,它比本地好一点。如何配置 DNS 根本不返回 AAAA 记录?
    猜你喜欢
    • 2022-12-05
    • 2019-09-04
    • 2021-01-28
    • 2021-09-10
    • 1970-01-01
    • 2022-01-11
    • 2021-11-14
    • 2021-10-28
    相关资源
    最近更新 更多