Github Action中Terraform Kubernetes Provider路径错误求助
问题分析
报错核心原因:
dflook/terraform-apply以容器化方式运行,与Minikube所在的Github Actions Runner宿主环境完全隔离,宿主机器的/home/runner/.kube/config不会自动同步到容器内的/github/home/.kube/config路径。- Terraform配置中通过
pathexpand(var.kube_config)解析出的路径,在容器环境中指向/github/home/.kube/config,但该路径下并没有Minikube生成的kubeconfig文件。
解决方案
方案一:复制kubeconfig到容器可访问路径
直接将Runner宿主的kubeconfig文件复制到Terraform容器默认读取的路径:
jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: setup minikube uses: manusa/actions-setup-minikube@v2.7.2 with: minikube version: 'v1.28.0' kubernetes version: 'v1.25.4' github token: ${{ secrets.GITHUB_TOKEN }} driver: docker container runtime: docker # 新增步骤:同步kubeconfig到容器可访问路径 - name: sync kubeconfig to github home run: | mkdir -p /github/home/.kube cp /home/runner/.kube/config /github/home/.kube/config chmod 600 /github/home/.kube/config - name: terraform-apply uses: dflook/terraform-apply@v1.29.1 with: path: terraform-k8s auto_approve: true
方案二:通过环境变量传递kubeconfig内容(更优雅)
修改Terraform配置,支持通过内容而非文件路径加载kubeconfig,避免路径依赖:
- 更新
variables.tf,新增kube_config_content变量:
variable "kube_config" { type = string default = "~/.kube/config" } variable "kube_config_content" { type = string default = "" }
- 更新
providers.tf,根据变量选择加载方式:
# CI环境下使用kubeconfig内容加载 provider "kubernetes" { count = var.kube_config_content != "" ? 1 : 0 config_contents = var.kube_config_content config_context = "minikube" } # 本地环境下使用文件路径加载 provider "kubernetes" { count = var.kube_config_content == "" ? 1 : 0 config_path = pathexpand(var.kube_config) config_context = "minikube" }
- 更新Github Actions配置,将宿主kubeconfig内容通过环境变量传给Terraform:
jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: setup minikube uses: manusa/actions-setup-minikube@v2.7.2 with: minikube version: 'v1.28.0' kubernetes version: 'v1.25.4' github token: ${{ secrets.GITHUB_TOKEN }} driver: docker container runtime: docker - name: terraform-apply uses: dflook/terraform-apply@v1.29.1 with: path: terraform-k8s auto_approve: true env: # 将宿主的kubeconfig内容传入Terraform变量 TF_VAR_kube_config_content: $(cat /home/runner/.kube/config)
验证步骤(可选)
如果不确定kubeconfig的实际路径,可在Minikube启动后添加以下步骤确认:
- name: verify kubeconfig location run: | echo "Runner user home: $HOME" echo "Kubeconfig content:" cat $HOME/.kube/config
内容的提问来源于stack exchange,提问作者RSK RSK
相关产品推荐
相关产品推荐

