Amazon web services 部署到专用子网时无法创建EKS群集

Amazon web services 部署到专用子网时无法创建EKS群集,amazon-web-services,terraform,Amazon Web Services,Terraform,我的目标是能够将EKS集群部署到aws(我正在使用Terraform),同时保持它不能从internet访问(我希望它是安全的) 我的尝试(片段)和工作: module "eks_cluster" { source = "terraform-aws-modules/eks/aws" version

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

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

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]
}
我尝试过(片段)但未成功的内容:

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]
}
但是,创建群集后,进程在以下步骤超时:
module.eks\u cluster.null\u resource。等待\u 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

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

在您的第二段代码中,您启用了私有访问并禁用了公共访问:

  cluster_endpoint_private_access                = true
  cluster_endpoint_public_access                 = false
如果您查看AWS文档中的表格,这种组合会导致:

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

没有来自internet的API服务器的公共访问权限。任何kubectl命令必须来自专有网络或连接的网络。有关连接选项,请参见访问专用API服务器

如果您检查
terraform aws modules/eks/aws
的源代码,您可以找到
module.eks\u cluster.null\u资源。等待\u cluster[0]
,因为您的错误是它试图访问您的集群


这显然是失败的,因为没有对群集的internet访问。您要么必须在同一VPC中的某个bastion ec2实例上运行terraform,要么在家庭/工作网络和VPC之间使用VPN。

当您使用公共子网时,这一切都能工作吗?Hi@Marcin:)我尝试使用相同的设置运行,但使用公共子网,它返回了相同的错误。我还向问题中添加了我所尝试和实际工作的内容。当您从部署环境手动运行wget--no check certificate-O-$ENDPOINT/healthz命令时会发生什么?手动测试时,您需要将端点设置为kubernetes API端点的地址。