首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >EKS Terraform -数据源aws_eks_cluster_auth -令牌过期

EKS Terraform -数据源aws_eks_cluster_auth -令牌过期
EN

Stack Overflow用户
提问于 2021-03-31 15:06:55
回答 1查看 493关注 0票数 0

我在AWS中部署了一个EKS集群,我使用terraform将组件部署到该集群。

为了进行身份验证,我使用了以下提供集群API身份验证的EKS数据源

代码语言:javascript
运行
复制
data "aws_eks_cluster_auth" "cluster" {
  name = var.cluster_id
}

data "aws_vpc" "eks_vpc" {
  id = var.vpc_id
}

并在几个local-exec提供程序(除其他资源之外)中使用令牌来部署组件

代码语言:javascript
运行
复制
resource "null_resource" "deployment" {
  provisioner "local-exec" {
    working_dir = path.module
    command     = <<EOH
kubectl \
  --server="${data.aws_eks_cluster.cluster.endpoint}" \
  --certificate-authority=./ca.crt \
  --token="${data.aws_eks_cluster_auth.cluster.token}" \
  apply -f test.yaml
EOH
  }
}

我遇到的问题是,有些资源需要一段时间才能部署,当terraform执行下一个资源时,我会得到这个错误,因为令牌已经过期:

代码语言:javascript
运行
复制
exit status 1. Output: error: You must be logged in to the server (the server has asked for the client to provide credentials)

有办法在运行data s之前强制重新创建local-exec吗?

EN

回答 1

Stack Overflow用户

发布于 2022-03-23 14:11:01

更新:示例移动到authz/main.tf

data.aws_eks_cluster_auth.cluster_auth.token使用不可配置的15分钟超时时间创建令牌。

解决这个问题的一种方法是使用sts令牌来创建一个长期存在的服务帐户令牌,并使用它来提供提供者为长时间运行的kuberenetes资源。

我创建了一个名为terraform-kubernetes-服务-帐户的模块来捕获创建服务帐户的这种常见行为,给它一些权限,并输出auth信息,即tokenca.crtnamespace

例如:

代码语言:javascript
运行
复制
module "terraform_admin" {
  source = "aidanmelen/service-account/kubernetes"

  name               = "terraform-admin"
  namespace          = "kube-system"
  cluster_role_name  = "terraform-admin"
  cluster_role_rules = [
    {
      api_groups     = ["*"]
      resources      = ["*"]
      resource_names = ["*"]
      verbs          = ["*"]
    },
  ]
}

provider "kubernetes" {
  alias                  = "terraform_admin_service_account"
  host                   = "https://kubernetes.docker.internal:6443"
  cluster_ca_certificate = module.terraform_admin.auth["ca.crt"]
  token                  = module.terraform_admin.auth["token"]
}

data "kubernetes_namespace_v1" "example" {
  metadata {
    name = kubernetes_namespace.ex_complete.metadata[0].name
  }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66890442

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档