You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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,避免路径依赖:

  1. 更新variables.tf,新增kube_config_content变量:
variable "kube_config" {
  type    = string
  default = "~/.kube/config"
}

variable "kube_config_content" {
  type    = string
  default = ""
}
  1. 更新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"
}
  1. 更新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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 04:45:46