Я уже успешно использую Terraform с Kubernetes provider для управления различными частями и сервисами на EKS кластере в AWS. Я хотел бы использовать 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 предоставит менее хакерский и более поддерживаемый способ настройки этих сред, но до тех пор...
Во-первых, нам нужен совместимый двоичный файл, и хотя мы точно не знаем, какая ОС/образ запускается экземплярами Terraform Cloud, мы знаем из документации, что он совместим с 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, который вам понадобится.