如何将 Terraform 连接到 Kubernetes 集群

How to connect Terraform to Kubernetes cluster

我正在尝试将 Terraform 连接到 Kubernetes 集群,但关于 Terraform 的文档并不清楚我应该使用哪些客户端证书进行 TLS 连接。由于我是 Kubernetes 和 Terraform 的新手,所以我无法弄清楚:

provider "kubernetes" {
  host = "https://xxx.xxx.xxx.xxx"

  client_certificate     = "${file("~/.kube/client-cert.pem")}"
  client_key             = "${file("~/.kube/client-key.pem")}"
  cluster_ca_certificate = "${file("~/.kube/cluster-ca-cert.pem")}"
}

在/etc/kubernetes/pki中有多个证书和密钥(front-proxy-client, api-server-client, api-server-kubelet-client),我应该使用哪一个来允许 terraform 连接到我的集群?


编辑:这里是kubernetes版本(kubectl版本的输出)

Client Version: version.Info{Major:"1", Minor:"22", GitVersion:"v1.22.1", GitCommit:"632ed300f2c34f6d6d15ca4cef3d3c7073412212", GitTreeState:"clean", BuildDate:"2021-08-19T15:45:37Z", GoVersion:"go1.16.7", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"22", GitVersion:"v1.22.3", GitCommit:"c92036820499fedefec0f847e2054d824aea6cd1", GitTreeState:"clean", BuildDate:"2021-10-27T18:35:25Z", GoVersion:"go1.16.9", Compiler:"gc", Platform:"linux/amd64"}

您是否在 运行 terraform 的客户端配置了 kubectl?在这种情况下,您可以使用与 kubectl 相同的配置。像这样

provider "kubernetes" {
  config_path    = "~/.kube/config"
  config_context = "my-context"
}

resource "kubernetes_namespace" "example" {
  metadata {
    name = "my-first-namespace"
  }
}

更多详情 - https://registry.terraform.io/providers/hashicorp/kubernetes/latest/docs#statically-defined-credentials

如果不配置 kubectl 是很容易的。你可以参考你的 flavor/version of kubernetes 的文档。您还可以使用来自现有启用 kubectl 的客户端的相同 kubeconfig 文件。确保安全地处理密钥。

这里提到了几种不同的方法 - https://learn.hashicorp.com/tutorials/terraform/kubernetes-provider?in=terraform/use-case#configure-the-provider

如果您使用的是像 EKS、gcloud 这样的云提供商风格,您也可以探索特定于云的插件。

我找到原因了。它没有连接到 Terraform。问题是当我设置我的集群时,我在 kubeadm init 命令中使用了选项 --apiserver-advertise-address=,但是当我使用 --control-plane-endpoint=,成功了。