Terraform 0.11.7执行terraform init遇proxyconnect错误,求排查方案(排除DNS问题)
Terraform 0.11.7 init时Checkpoint错误的额外原因与解决办法
我之前帮团队排查过同款老版本Terraform的问题,除了DNS服务器异常,这个报错基本都和代理配置失误或者Terraform的版本检查机制有关,具体分析和解决办法如下:
可能的原因
- 代理环境变量格式写错了:这是最常见的坑。错误日志里的
lookup https on <corporate dns ip>:53说明系统在傻呵呵地解析https这个“域名”——十有八九是你把HTTP_PROXY或HTTPS_PROXY写成了https://proxy.corp.com:8080(带https前缀),但正确的代理地址应该以http://开头(哪怕是处理HTTPS请求,代理本身用的也是HTTP协议)。 - 企业代理拦截了Checkpoint请求:有些公司的代理会限制外部HTTPS请求,或者对HTTPS流量做证书替换拦截,导致Terraform连不上HashiCorp的Checkpoint API,间接抛出DNS相关的错误。
- 代理认证没配置:如果公司代理需要用户名密码,但你没在环境变量里加认证信息,也会导致连接失败,触发这类模糊的DNS报错。
对应的解决办法
修正代理环境变量
先检查当前的代理配置,然后改成正确格式:# 设置HTTP代理(处理普通HTTP请求) export HTTP_PROXY=http://你的代理IP:端口 # 设置HTTPS代理(处理HTTPS请求,注意开头还是http) export HTTPS_PROXY=http://你的代理IP:端口 # 如果代理需要账号密码,格式是这样 export HTTP_PROXY=http://用户名:密码@你的代理IP:端口改完之后重新运行
terraform init试试。直接禁用Checkpoint版本检查
Checkpoint就是Terraform用来查新版本的功能,对于0.11.7这种早就停更的老版本来说,完全没必要留着它。两种禁用方式:- 临时禁用:每次执行命令前先设环境变量
export CHECKPOINT_DISABLE=1 terraform init - 永久禁用:在你的Terraform配置文件里加这段(随便放在一个
.tf文件的terraform块里就行):terraform { disable_checkpoint = true }
- 临时禁用:每次执行命令前先设环境变量
让Checkpoint请求绕过代理
如果公司内部DNS能正常解析HashiCorp的域名,把Checkpoint的域名加入NO_PROXY列表,这样Terraform连Checkpoint时就不走代理了:export NO_PROXY=checkpoint-api.hashicorp.com,hashicorp.com处理代理证书拦截的情况
如果你的公司代理替换了HTTPS证书,得把代理的CA证书导入系统信任链,或者用环境变量指定证书路径:export SSL_CERT_FILE=/path/to/你的代理CA证书.pem
内容的提问来源于stack exchange,提问作者Snowcrash
相关产品推荐
相关产品推荐

