使用 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_cluster
和 aws_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使用方法