当我使用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。
1条答案
按热度按时间h43kikqp1#
我有一个类似的问题,我创建了一个集群使用假设的角色,我单独创建,我得到错误tls错误在pod中。
我的解决方案是,我创建的用来创建集群的角色没有eks作为可信实体,一旦我修改了角色的信任关系,将其添加到eks服务中,它就可以发布证书了。