gpt4 book ai didi

Terraform EKS 标记

转载 作者:行者123 更新时间:2023-12-03 20:15:00 37 4
gpt4 key购买 nike

我遇到了 Terraform EKS 标记的问题,并且似乎没有找到可行的解决方案来在创建新集群时标记所有 VPC 子网。

提供一些上下文:我们有一个 AWS VPC,我们在其中将多个 EKS 集群部署到子网中。我们不创建 VPC 或子网是 EKS 集群创建的一部分。因此,创建集群的 terraform 代码不会标记现有子网和 VPC。虽然 EKS 会添加所需的标签,但下次我们在 VPC 上运行 terraform apply 时会自动删除它们。

我的解决方法是在 VPC 中提供一个 terraform.tfvars 文件,如下所示:

eks_tags = 
[
"kubernetes.io/cluster/${var.cluster-1}", "shared",
"kubernetes.io/cluster/${var.cluster-2}", "shared",
"kubernetes.io/cluster/${var.cluster-2}", "shared",
]

然后在 VPC 和子网资源中,我们执行类似的操作
    resource "aws_vpc" "demo" {
cidr_block = "10.0.0.0/16"

tags = "${
map(
${var.eks_tags}
)
}"
}

但是,上述方法似乎不起作用。我尝试了 https://www.terraform.io/docs/configuration-0-11/interpolation.html 中的各种 Terraform 0.11 功能但他们没有帮助。

有没有人能够解决这个问题?

我们总是为每个 EKS 集群创建新的 VPC 和子网的想法是错误的。显然,这必须是一种使用 Terraform 标记现有 VPC 和子网资源的方法吗?

最佳答案

您现在可以使用 aws 提供程序 ignore_tags属性,以便使用 aws_ec2_tag 制作的标签下次应用 VPC 模块时不会删除资源。
例如提供者变为:

provider "aws" {
profile = "terraform"
region = "us-west-1"

// This is necessary so that tags required for eks can be applied to the vpc without changes to the vpc wiping them out.
// https://registry.terraform.io/providers/hashicorp/aws/latest/docs/guides/resource-tagging
ignore_tags {
key_prefixes = ["kubernetes.io/"]
}
}
然后,您可以利用 aws_ec2_tag在您的 EKS 模块中使用类似的资源,而不必担心下次应用 VPC 模块时标签会被删除。
/*
Start of resource tagging logic to update the provided vpc and its subnets with the necessary tags for eks to work
The toset() function is actually multiplexing the resource block, one for every item in the set. It is what allows
for setting a tag on each of the subnets in the vpc.
*/
resource "aws_ec2_tag" "vpc_tag" {
resource_id = data.terraform_remote_state.vpc.outputs.vpc_id
key = "kubernetes.io/cluster/${var.cluster_name}"
value = "shared"
}

resource "aws_ec2_tag" "private_subnet_tag" {
for_each = toset(data.terraform_remote_state.vpc.outputs.private_subnets)
resource_id = each.value
key = "kubernetes.io/role/elb"
value = "1"
}

resource "aws_ec2_tag" "private_subnet_cluster_tag" {
for_each = toset(data.terraform_remote_state.vpc.outputs.private_subnets)
resource_id = each.value
key = "kubernetes.io/cluster/${var.cluster_name}"
value = "shared"
}

resource "aws_ec2_tag" "public_subnet_tag" {
for_each = toset(data.terraform_remote_state.vpc.outputs.public_subnets)
resource_id = each.value
key = "kubernetes.io/role/elb"
value = "1"
}

resource "aws_ec2_tag" "public_subnet_cluster_tag" {
for_each = toset(data.terraform_remote_state.vpc.outputs.public_subnets)
resource_id = each.value
key = "kubernetes.io/cluster/${var.cluster_name}"
value = "shared"
}

关于Terraform EKS 标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57495581/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com