我目前正在使用 EKSCTL 配置我的 EKS 集群,并且我想使用 Terraform 来配置集群。我正在使用 Terraform EKS 模块来创建集群。我已经使用 EKSCTL 通过以下命令创建身份映射
eksctl create iamidentitymapping -- region us-east-1 --cluster stage-cluster --arn arn:aws:iam::111222333444:role/developer --username dev-service
我想用以下命令将此命令转换为 Terraform,但这不是最好的方法
resource "null_resource" "eks-identity-mapping" {
depends_on = [
module.eks,
aws_iam_policy_attachment.eks-policy-attachment
]
provisioner "local-exec" {
command = <<EOF
eksctl create iamidentitymapping \
--cluster ${var.eks_cluster_name} \
--arn ${data.aws_iam_role.mwaa_role.arn} \
--username ${var.mwaa_username} \
--profile ${var.aws_profile} \
--region ${var.mwaa_aws_region}
EOF
}
}
如何使用 Kubernetes 提供程序来实现此目标
我还没有找到该特定命令的明确匹配,但您可以通过在 kubernetes 中设置
aws-auth
配置映射来实现类似的功能,一次性添加所有用户/角色及其访问权限。
例如,我们使用如下所示的内容来向我们的集群提供管理员列表:
resource "kubernetes_config_map" "aws_auth" {
metadata {
name = "aws-auth"
namespace = "kube-system"
}
data = {
mapRoles = <<CONFIGMAPAWSAUTH
- rolearn: ${var.k8s-node-iam-arn}
username: system:node:{{EC2PrivateDNSName}}
groups:
- system:bootstrappers
- system:nodes
- rolearn: arn:aws:iam::111222333444:role/developer
username: dev-service
groups:
- system:masters
CONFIGMAPAWSAUTH
}
}
请注意,此文件包含所有角色映射,因此您应该确保将
var.k8s-node-iam-arn
设置为集群的超级用户,否则您可能会被锁定。此外,您还必须设置这些角色将获得哪些访问权限。
您还可以添加特定的 IAM 用户而不是角色:
- userarn: arn:aws:iam::1234:user/user.first
username: user.first
groups:
- system:masters
您可以直接在 eks 模块中执行此操作。 您创建要添加的角色列表,例如:
locals {
aws_auth_roles = [
{
rolearn = ${data.aws_iam_role.mwaa_role.arn}
username = ${var.mwaa_username}
groups = [
"system:masters"
]
},
]
}
然后在模块中添加:
module "eks" {
source = "terraform-aws-modules/eks/aws"
version = "19.5.1"
[...]
# aws-auth configmap
manage_aws_auth_configmap = true
aws_auth_roles = local.aws_auth_roles
[...]
}
注意:在旧版本的“terraform-aws-modules/eks/aws”(14、17)中,它是
map_users
和 map_roles
,在 19 中它是 manage_aws_auth_configmap
和 aws_auth_users
、aws_auth_roles
。
请参阅此处的文档:https://registry.terraform.io/modules/terraform-aws-modules/eks/aws/19.7.0#input_manage_aws_auth_configmap
更新:为了使其正常工作并且不会出现像
Error: The configmap "aws-auth" does not exist
这样的错误,您还需要添加此身份验证部分:
data "aws_eks_cluster_auth" "default" {
name = local.cluster_name
}
provider "kubernetes" {
host = module.eks.cluster_endpoint
cluster_ca_certificate = base64decode(module.eks.cluster_certificate_authority_data)
token = data.aws_eks_cluster_auth.default.token
}
我遇到了这个问题,并创建了一个工作示例,说明如何为现有 EKS 集群更新自动创建的 was-auth 配置映射: