我已经成功地使用 TerraformKubernetes 提供商管理各个部分和服务艾克斯AWS 集群。我想使用Terraform 云来管理它(并利用良好的 Github/VCS 集成)。但是,kubeconfig
我为该集群使用的aws-iam-authenticator
二进制文件利用 AWS 凭证(以及 IAM 权限)在 AWS 和集群内进行身份验证和授予权限,方法是红外光谱仪。
Terraform Cloud 实例没有aws-iam-authenticator
安装二进制文件,因此,虽然它们具有正确的 AWS 凭证,但无法利用这些凭证进行身份验证并连接 EKS 集群。
使用常规(非云)Terraform 不会出现此问题,您只需确保运行您的机器plan/apply
具有二进制文件和凭据并且它“正常工作”,如何让 Terraform Cloud 以相同的方式工作?
答案1
Terraform Cloud 文档涵盖这一点,虽然不被禁止,但也不完全鼓励。这些文档中提到了两种方法,使用local-exec
配置程序(其使用被描述为“最后的手段”并且可能有问题),或使用子模块。文档还提到只应使用“独立二进制文件”。值得庆幸的是,aws-iam-authenticator
它确实可用作许多系统的静态独立二进制文件。不幸的是,除了提到子模块之外,文档并未涵盖实现此功能所需的步骤。
希望 Hashicorp 将来能够提供一种更少黑客攻击且更有支持的方式来定制这些环境,但在此之前……
首先,我们需要一个兼容的二进制文件,虽然我们不知道 Terraform Cloud 实例正在运行什么 OS/Image,但我们知道文档它与 Linux x86_64 兼容。因此,由于aws-iam-authenticator
可作为 Linux x86_64 的独立静态二进制文件使用,我们需要做的是将该二进制文件引入环境,然后使其通常可供实例使用(因为我们无法控制它的具体调用方式)。
Terraform Cloud 允许您操作环境变量,$PATH
一旦我们在主机上拥有二进制文件,我们就可以通过操作变量来实现这一点。最简单的方法是将二进制文件添加到文件夹内的配置中,但是如果您想将其用于多个配置而不必在每个配置中单独管理二进制文件(想象一下必须单独更新它们),我建议将其作为 git 存储库中的子模块执行。
以下是一个示例包含二进制文件的公共仓库,您可以将其作为子模块添加到您的 repo 中,如下所示:
git submodule add https://github.com/comerford/tc-tools.git
然后,您可以照常提交/推送,确保您的工作区版本控制设置设置为克隆子模块,如下所示:
最后,为了确保无论二进制文件如何调用都能正常工作,您需要对PATH
环境变量进行更改,以便它能够看到您的新二进制文件,但又不会破坏任何内容。以下是ENV
针对上述子模块对我有用的变量:
为了使该字符串具有更可用的格式:
"~/tc-tools:/home/terraform/tc-tools:./tc-tools:/usr/bin:/usr/local/bin:/bin:$PATH"
它正在猜测可能的路径,但我不能 100% 确定哪一条路径有效,因为我不想为了几个角色而导致运行中断。
虽然这专门针对aws-iam-authenticator
二进制文件,但它应该可以作为您碰巧需要的任何 Linux x86_64 静态二进制文件的通用方法。