EKS IAM服务帐户角色不起作用

时间:2019-10-22 15:48:48

标签: amazon-web-services kubernetes roles eks

我正在尝试为服务帐户提供IAM角色,以保护自动定标器。但是我似乎丢失了一些东西。精度不高,我正在使用Terraform创建集群。

我遵循了以下文档:

因此,我为节点创建了一个角色,而不是一个角色,并将自动缩放器的策略应用于此新角色。这部分是基本的,在那里没有问题。

我还以Terraform激活了openid提供程序:

resource "aws_iam_openid_connect_provider" "example" {
  client_id_list  = ["sts.amazonaws.com"]
  thumbprint_list = []
  url             = aws_eks_cluster.eks.identity.0.oidc.0.issuer
}

没有问题,集群正在创建自己的问题。

否,我没有将注释添加到服务帐户中以进行自动缩放:

---
apiVersion: v1
kind: ServiceAccount
metadata:
  annotations:
    eks.amazonaws.com/role-arn: arn:aws:iam::ID:role/terraform-eks-autoscaller
  labels:
    k8s-addon: cluster-autoscaler.addons.k8s.io
    k8s-app: cluster-autoscaler
  name: cluster-autoscaler
  namespace: kube-system

我的问题是它似乎不起作用,并且pod仍在尝试使用新的IAM角色,但仍在使用node角色:

Failed to create AWS Manager: cannot autodiscover ASGs: AccessDenied: User: arn:aws:sts::ID:assumed-role/terraform-eks-node/i-ID is not authorized to perform: autoscaling:DescribeTags

有人知道我在这里缺少什么步骤吗?

提前感谢您的帮助;)

1 个答案:

答案 0 :(得分:2)

所以答案很简单。您的OIDC提供程序配置缺少指纹。 Iam正常工作至关重要。 通常,如果您在AWS控制台中创建OIDC提供程序,则会自动填充指纹,但是通过terraform并非如此。

我也被这个吸引住了,所以我写了一个关于这个的博客,你可以在这里找到:https://medium.com/@marcincuber/amazon-eks-with-oidc-provider-iam-roles-for-kubernetes-services-accounts-59015d15cb0c

要解决您的问题,只需添加以下内容:

9E99A48A9960B14926BB7F3B02E22DA2B0AB7280

以上是哈希根CA,该根CA在接下来的10多年中都没有变化,并且在所有地区都是相同的。如何获取它,您可以阅读我在上面添加的博客链接。

此外,请确保使用与您的kubernetes版本匹配的最新自动缩放器版本。另外,请尝试使用fsGroup添加安全上下文:65534。这是使OIDC对于某些应用程序正常运行的当前解决方法。