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