使用 Terraform 将 `configMap` 应用到 EKS 集群

Posted

技术标签:

【中文标题】使用 Terraform 将 `configMap` 应用到 EKS 集群【英文标题】:Apply a `configMap` to EKS cluster with Terraform 【发布时间】:2021-10-22 08:45:04 【问题描述】:

我正在尝试通过 Terraform 将 configMap 应用于 EKS 集群,但我不知道如何。有很多关于这方面的文档,但我没有看到有人成功,所以我不确定这是否可能。

目前,我们通过 Terraform 控制我们的基础设施。当我通过 AWS cli 创建.kube/config 文件并尝试连接到集群时,我收到Unauthorized 错误,记录了如何解决here;在 AWS。根据文档,我们需要编辑aws-auth configMap 并在其中添加一些行,用于配置 API 服务器以接受来自具有特定角色的 VM 的请求。问题是只有集群创建者有权连接到集群并进行这些更改。在这种情况下,集群创建者是 Terraform,所以我们要做的是 aws config,我们将 Terraform 的凭据添加到我们尝试连接到集群的 VM,我们成功地对其进行身份验证,将必要的行添加到configMap,然后从 VM 撤消凭据。

从那时起,任何用户都可以从该虚拟机连接到集群,这是我们的目标。现在我们希望能够通过 Terraform 对象编辑 configMap,而不是执行所有这些过程。 Terraform 中有一个资源 kubernetes_config_map,但这是一个不同的提供者(kubernetes),而不是 AWS,因此它无法找到集群,并且尝试连接到在 localhost 中运行的 API 服务器失败。

【问题讨论】:

【参考方案1】:

Terraform 中有一个资源 kubernetes_config_map,但那是不同的提供商 (kubernetes),而不是 AWS

这是一个不同的提供商,因为 Terraform 现在应该与不同的 API(Kubernetes API 而不是 AWS API)进行交互。

aws_eks_clusteraws_eks_cluster_auth 的数据源可用于验证 kubernetes provider。

aws_eks_cluster_auth 有验证 kubernetes 提供者的示例:

data "aws_eks_cluster" "example" 
  name = "example"


data "aws_eks_cluster_auth" "example" 
  name = "example"


provider "kubernetes" 
  host                   = data.aws_eks_cluster.example.endpoint
  cluster_ca_certificate = base64decode(data.aws_eks_cluster.example.certificate_authority[0].data)
  token                  = data.aws_eks_cluster_auth.example.token
  load_config_file       = false

另一个例子是 Cloud Posse AWS EKS 模块 authenticate the kubernetes provider 以及如何使用 ConfigMap

【讨论】:

以上是关于使用 Terraform 将 `configMap` 应用到 EKS 集群的主要内容,如果未能解决你的问题,请参考以下文章

云原生之kuberneteskubernetes集群下ConfigMap使用方法

K8s 中 ConfigMap 使用介绍

下篇1:将 ConfigMap 中的键值对作为容器的环境变量

Kubernetes-ConfigMap

k8s学习-ConfigMap(创建使用更新删除等)

k8s中configmap的使用方法