kubernetes 为什么EKS不能在创建节点池后向kubelet颁发证书?

okxuctiv  于 2023-03-12  发布在  Kubernetes
关注(0)|答案(1)|浏览(161)

当我使用terraform创建具有单个节点池的EKS集群时,我遇到了kubelet证书问题,即csr处于挂起状态,如下所示:

NAME        AGE     SIGNERNAME                      REQUESTOR          REQUESTEDDURATION   CONDITION
csr-8qmz5   4m57s   kubernetes.io/kubelet-serving   kubernetes-admin   <none>              Pending
csr-mq9rx   5m      kubernetes.io/kubelet-serving   kubernetes-admin   <none>              Pending

正如我们所看到的,这里的REQUESTOR是kubernetes-admin,我真的不知道为什么。我的集群本身的terrafrom代码:

resource "aws_eks_cluster" "eks" {
  name     = var.eks_cluster_name
  role_arn = var.eks_role_arn
  version = var.k8s_version
  vpc_config {
    endpoint_private_access = "true"
    endpoint_public_access  = "true"
    subnet_ids  = var.eks_public_network_ids
    security_group_ids  = var.eks_security_group_ids
  }
  kubernetes_network_config {
    ip_family = "ipv4"
    service_ipv4_cidr = "10.100.0.0/16"
  }
}

节点组的地形代码:

resource "aws_eks_node_group" "aks-NG" {
  depends_on = [aws_ec2_tag.eks-subnet-cluster-tag, aws_key_pair.eks-deployer]
  cluster_name  = aws_eks_cluster.eks.name
  node_group_name = "aks-dev-NG"
  ami_type  = "AL2_x86_64"
  node_role_arn = var.eks_role_arn
  subnet_ids    = var.eks_public_network_ids
  capacity_type = "ON_DEMAND"
  instance_types = var.eks_nodepool_instance_types
  disk_size = "50"
  scaling_config {
    desired_size = 2
    max_size     = 2
    min_size     = 2
  }
  tags = {
    Name  = "${var.eks_cluster_name}-node"
    "kubernetes.io/cluster/${var.eks_cluster_name}" = "owned"
  }
  remote_access {
    ec2_ssh_key = "eks-deployer-key"
  }
}

据我所知,这是非常基本的配置。
现在,当我使用完全相同的参数通过AWS管理控制台创建集群和节点组时,即集群IAM角色和节点组IAM角色与Terraform相同,一切正常:

NAME        AGE     SIGNERNAME                      REQUESTOR                                    REQUESTEDDURATION   CONDITION
csr-86qtg   6m20s   kubernetes.io/kubelet-serving   system:node:ip-172-31-201-140.ec2.internal   <none>              Approved,Issued
csr-np42b   6m43s   kubernetes.io/kubelet-serving   system:node:ip-172-31-200-199.ec2.internal   <none>              Approved,Issued

但在这里,证书请求者是节点本身(根据我的理解)。所以我想知道这里的问题是什么?为什么请求者在这种情况下是不同的,从AWS管理控制台创建这些资源和使用terraform有什么区别,以及我如何管理这个问题?请帮助。
UPD.
我发现这个问题出现在我通过为terraform创建的假定角色使用terraform创建集群的时候。当我使用terraform创建集群的时候,使用常规的IAM用户凭证,使用相同的权限设置,一切都很好。它没有给出任何关于根本原因的答案,但是仍然,它是需要考虑的。现在看起来像是奇怪的EKS bug。

h43kikqp

h43kikqp1#

我有一个类似的问题,我创建了一个集群使用假设的角色,我单独创建,我得到错误tls错误在pod中。
我的解决方案是,我创建的用来创建集群的角色没有eks作为可信实体,一旦我修改了角色的信任关系,将其添加到eks服务中,它就可以发布证书了。

相关问题