【问题标题】:Apply a `configMap` to EKS cluster with Terraform使用 Terraform 将 `configMap` 应用到 EKS 集群
【发布时间】: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 服务器失败。

【问题讨论】:

    标签: terraform terraform-provider-aws amazon-eks


    【解决方案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

    【讨论】:

      猜你喜欢
      • 2021-12-02
      • 2021-07-20
      • 2021-03-25
      • 2021-07-07
      • 2021-06-25
      • 2021-04-04
      • 2019-07-08
      • 2021-03-16
      • 2021-07-21
      相关资源
      最近更新 更多