部署到私有子网时无法创建 EKS 集群

alt*_*-f4 2 amazon-web-services terraform

我的目标是能够将 EKS 集群部署到 aws(我正在使用 Terraform),同时保持它无法从互联网访问(我希望它是安全的)。

我尝试过的(片段)和工作原理:

module "eks_cluster" {
  source                                         = "terraform-aws-modules/eks/aws"
  version                                        = "13.2.1"
  cluster_name                                   = "${var.project_name}-foo-${var.environment}"
  cluster_version                                = "1.18"
  vpc_id                                         = module.vpc.vpc_id
  cluster_enabled_log_types                      = ["api", "audit", "authenticator", "controllerManager", "scheduler"]
  enable_irsa                                    = true
  subnets                                        = [module.vpc.subnet_a_private_id, module.vpc.subnet_b_private_id, module.vpc.subnet_a_public_id]
}
Run Code Online (Sandbox Code Playgroud)

我尝试过(片段)但没有成功

module "eks_cluster" {
  source                                         = "terraform-aws-modules/eks/aws"
  version                                        = "13.2.1"
  cluster_name                                   = "${var.project_name}-foo-${var.environment}"
  cluster_version                                = "1.18"
  vpc_id                                         = module.vpc.vpc_id
  cluster_enabled_log_types                      = ["api", "audit", "authenticator", "controllerManager", "scheduler"]
  enable_irsa                                    = false
  cluster_create_endpoint_private_access_sg_rule = false
  cluster_endpoint_private_access                = true
  cluster_endpoint_private_access_cidrs          = ["0.0.0.0/0"]
  cluster_endpoint_public_access                 = false
  subnets                                        = [module.vpc.subnet_a_private_id, module.vpc.subnet_b_private_id]
}
Run Code Online (Sandbox Code Playgroud)

但是,创建集群后,进程在步骤:超时,module.eks_cluster.null_resource.wait_for_cluster[0]并出现以下错误:

Error: Error running command 'for i in `seq 1 60`; do if `command -v wget > /dev/null`; then wget --no-check-certificate -O - -q $ENDPOINT/healthz >/dev/null && exit 0 || true; else curl -k -s $ENDPOINT/healthz >/dev/null && exit 0 || true;fi; sleep 5; done; echo TIMEOUT && exit 1': exit status 1. Output: TIMEOUT
Run Code Online (Sandbox Code Playgroud)

如果需要,我很乐意提供有关其他配置的更多详细信息。

Mar*_*cin 5

在第二个片段中,您启用了私人访问并禁用了公共访问:

  cluster_endpoint_private_access                = true
  cluster_endpoint_public_access                 = false
Run Code Online (Sandbox Code Playgroud)

如果您查看AWS 文档中的修改集群终端节点访问表,这种组合会导致:

集群 API 服务器的所有流量必须来自集群的 VPC或连接的网络内。

无法从互联网公开访问您的 API 服务器。任何 kubectl 命令都必须来自 VPC 或连接的网络内。有关连接选项,请参阅访问专用 API 服务器。

terraform-aws-modules/eks/aws 如果你检查这里的源代码,你可以发现module.eks_cluster.null_resource.wait_for_cluster[0]你的错误是local-exec尝试访问你的集群。

这显然会失败,因为您的集群无法通过互联网访问。您要么必须在同一 VPC 中的某个堡垒 ec2 实例上运行 terraform,要么在家庭/工作网络和 VPC 之间使用 VPN。