Terraformのメモ
zipファイルをダウンロードしてインストール
terraformは各ディストリビュータからパッケージが出ている。 Install | Terraform | HashiCorp Developer
Ubuntuのインストール方法としては下記。
wget -O- https://apt.releases.hashicorp.com/gpg | sudo gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/hashicorp.list
sudo apt update && sudo apt install terraform
ただ ubuntu:24.04 のコンテナイメージだと lsb_release でエラーというか余計な行が出力されているようだ。
$ lsb_release -cs
No LSB modules are available.
noble
No LSB modules are available. と出力されている。
aptで管理するメリットとしては、apt upgradeした際にパッケージアップデートできる点があると思う。
ただ私は定期的にCUI用のコンテナイメージを更新しているので、このメリットはあまり無い。
このためアーカイブからダウンロードしてインストールする。 下記のURLから対象プラットフォームのzipファイルをダウンロード。 Install | Terraform | HashiCorp Developer unzipで展開するとカレントディレクトリにterraformのバイナリができるので、/usr/local/binにコピーした。
Gentooでのterraformインストール
マスクされているので解除する
!!! All ebuilds that could satisfy "app-admin/terraform" have been masked.
!!! One of the following masked packages is required to complete your reque
st:
- app-admin/terraform-1.7.5::gentoo (masked by: BUSL-1.1 license(s), ~arm64
keyword)
A copy of the 'BUSL-1.1' license is located at '/var/db/repos/gentoo/licens
es/BUSL-1.1'.
- app-admin/terraform-1.7.2::gentoo (masked by: BUSL-1.1 license(s), ~arm64
keyword)
For more information, see the MASKED PACKAGES section in the emerge
man page or refer to the Gentoo Handbook.
BUSL-1.1 ライセンスに同意する必要がある
/etc/portage/package.license に下記追加
app-admin/terraform BUSL-1.1
/etc/portage/package.accept_keywords に下記追加
app-admin/terraform ~arm64
インストール
sudo emerge -av app-admin/terraform
エラー集
TLS 証明書の検証が失敗している
kubernetes_job.example: Creating...
╷
│ Error: Failed to create Job! API error: Post "https://127.0.0.1:6443/apis
/batch/v1/namespaces/default/jobs": tls: failed to verify certificate: x509
: certificate signed by unknown authority
│
│ with kubernetes_job.example,
│ on main.tf line 1, in resource "kubernetes_job" "example":
│ 1: resource "kubernetes_job" "example" {
3つのアプローチがありそう
Kubernetes プロバイダの設定変更
Terraform の Kubernetes プロバイダ設定で insecure オプションを使って、証明書の検証をスキップする方法。 ただし、これはセキュリティ上のリスクを伴うため、本番環境では推奨されない。 テストや開発環境での一時的な解決策として使用できる。
参考 Docs overview | hashicorp/kubernetes | Terraform | Terraform Registry
provider "kubernetes" {
config_path = "~/.kube/config"
load_config_file = true
insecure = true
}
CA 証明書を信頼する
k3s クラスターで使用されている CA (認証局) 証明書を信頼する設定を追加する方法です。 kubeconfig ファイルに certificate-authority-data が含まれているか確認し、その証明書が正しくシステムにインストールされているかを確認。 システムの信頼された証明書ストアに CA 証明書を追加することも一つの方法らしい。
証明書のパスを明示的に指定
kubeconfig ファイルに記載されている証明書のパスを直接 Terraform に指定する方法です。 これには client_certificate, client_key, および cluster_ca_certificate パラメータを使用。
k3sの場合、証明書は /var/lib/rancher/k3s/server/tls/ にあるので、 ~/.kube 配下にコピーする。 その上でprovider.tfを下記のように記述
provider "kubernetes" {
config_path = "~/.kube/config"
client_certificate = file("~/.kube/client-cert.pem")
client_key = file("~/.kube/client-key.pem")
cluster_ca_certificate = file("~/.kube/server-ca.crt")
}
curlで証明書を用いて接続できるか確認する
curl --cacert ~/.kube/server-ca.crt https://127.0.0.1:6443
私はself-signed certificateで駄目だった(オレオレ証明書はNG)
curl: (60) SSL certificate problem: self-signed certificate in certificate chain
More details here: https://curl.se/docs/sslcerts.html
curl failed to verify the legitimacy of the server and therefore could not
establish a secure connection to it. To learn more about this situation and
how to fix it, please visit the web page mentioned above.
証明書を登録する。
Linuxシステムで使える証明書アップデートツールに update-ca-certificates がある。 Gentooの場合、update-ca-certificates が参照する証明書のディレクトリが異なる可能性があるので man update-ca-certificates でコマンドが参照するパスを確認する。
sudo mkdir -p /usr/local/share/ca-certificates/
sudo cp ~/.kube/server-ca.crt /usr/local/share/ca-certificates/
sudo update-ca-certificates
再度確認。update-ca-certificates でOSに証明書を登録したので証明書を使わなくてもアクセスできる
curl --cacert ~/.kube/server-ca.crt https://127.0.0.1:6443
ジョブの確認 kubectl get jobs
ログ確認 kubectl logs jobs/example-job