【问题标题】:How to connect Terraform to Kubernetes cluster如何将 Terraform 连接到 Kubernetes 集群
【发布时间】:2021-12-16 04:40:54
【问题描述】:

我正在尝试将 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"}

【问题讨论】:

  • 您是如何设置集群的?您使用的是云提供商选项还是一些裸机?您使用的是哪个 Kubernetes 版本?
  • 我用版本编辑了问题。我在 AWS EC2 实例(不是 EKS 服务)上部署 kubernetes。我遵循了使用 kubeadm init 设置集群的简单步骤。
  • 集群工作正常,但我无法连接 Terraform,因为我一直没有收到来自集群端点的响应。我还仔细检查了入站规则,我允许所有 IP 的所有流量( ipv4 和 ipv6 )。
  • 我正在自己的计算机上执行 terraform 脚本。它在任何意义上都没有加入集群,它既不是工作节点,也不是主节点。另外,我的计算机上没有安装 kubectl。我以为 Terraform 只会使用配置文件并使用集群上的工具。我可能需要在本地计算机上安装 kubectl 吗?

标签: ssl kubernetes terraform


【解决方案1】:

您是否在运行 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 是很容易的。您可以参考您的 kubernetes 风格/版本的文档。您还可以使用现有启用 kubectl 的客户端中的相同 kubeconfig 文件。确保妥善处理钥匙。

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

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

【讨论】:

  • 我遵循了该教程,但仍然没有运气。我正在使用 kubernetes 上下文(默认上下文:kubernetes-admin@kubernetes)并且我没有创建自己的上下文。会不会是这个原因?
  • 如果您的 kubeconfig 中只有一个上下文,则根本不需要提及“config_context”。只需提及“config_path”即可。您可以在计算机上使用 kubectl 连接到集群吗?
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2017-11-08
    • 2020-06-24
    • 1970-01-01
    • 2019-06-10
    • 1970-01-01
    • 2019-03-11
    • 2019-07-31
    • 1970-01-01
    • 2019-06-13
    相关资源
    最近更新 更多