如何將 aws-iam-authenticator 與遠端 Terraform Cloud Runs 一起使用?
我已經成功地將 Terraform 與Kubernetes 提供商一起使用來管理 AWS 中EKS集群上的各個部分和服務。我想使用Terraform Cloud來管理它(並利用好的 Github/VCS 集成)。但是,
kubeconfig
我為該集群使用的aws-iam-authenticator
二進製文件利用 AWS 憑證(以及因此的 IAM 權限)通過IRSA在 AWS 和集群內進行身份驗證和授予權限。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 儲存庫中的子模組。這是一個包含二進製文件的公共倉庫的範例,您可以將其作為子模組添加到您的倉庫中,如下所示:
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 靜態二進製文件的通用方法。