elasticsearch http 请求通过 aws privatelink

问题描述 投票:0回答:0

目前,Elasticsearch(我们托管在 EC2 上)和 Atlantis (ECS) 有不同的 VPC 和子网。我想从 Atlantis 向 EC2 上的 Elastic 发送请求。

目标:使用 Privatelink 将来自 Atlantis 的 http 请求发送到 EC2 上的 ElasticSearch,这样我们就不必对等 Atlantis 和 Elastic VPC。

我在文档中看到 Privatelink(AWS VPC 端点 - 接口)可用于公开 AWS 服务 API,但这不是我想要做的。

当我创建以下 VPC 端点时,我能够从

ping ec2.us-east-2.api.aws
(可能根本不相关)获得响应,但不能从 VPC 端点中的其他 DNS 名称获得响应,也不能从 elastic 获得响应。有趣的是,VPC Endpoint 将解析为看起来位于 elastic VPC 中的 IP。

variable "atlantis_vpc_id"{
  type = string
  default = "vpc-vpc-id-here"
}

variable "elasticsearch_vpc_id"{
  type = string
  default = "vpc-vpc-id-here"
}

variable "atlantis_subnet_id"{
  type = string
  default = "subnet-subnet-id-here"
}

variable "elastic_dev_subnet_id"{
  type = string
  default = "subnet-subnet-id-here"
}

variable "elastic_dev_private_ip"{
  type = string
  default = "elastic-private-ip"
}

data "aws_subnet" "privatelink-atlantis-subnet" {
  id       = var.atlantis_subnet_id
}

data "aws_subnet" "privatelink-elastic-dev-subnet" {
  id       = var.elastic_dev_subnet_id
}

resource "aws_security_group" "privatelink-elastic-vpc-ep-sg" {
  name        = "privatelink-elastic-sg"
  description = "Security group for Elasticsearch VPC endpoint"

  vpc_id = var.elasticsearch_vpc_id

  ingress {
    from_port   = 9200
    to_port     = 9200
    protocol    = "tcp"
    cidr_blocks = [data.aws_subnet.privatelink-atlantis-subnet.cidr_block]
  }

#  not sure if need egress to 0.0.0.0
  egress {
    from_port   = 9200
    to_port     = 9200
    protocol    = "tcp"
    cidr_blocks = ["0.0.0.0/0"]
  }
}

resource "aws_vpc_endpoint" "privatelink_elasticsearch_endpoint" {
  vpc_id       = var.elasticsearch_vpc_id
  service_name = "com.amazonaws.us-east-2.ec2"

  vpc_endpoint_type    = "Interface"
  security_group_ids   = [aws_security_group.privatelink-elastic-vpc-ep-sg.id, "sg-050aa2ec7f87e742d"]
  private_dns_enabled  = true
  subnet_ids           = [var.elastic_dev_subnet_id]
}

我什至不确定 AWS Privatelink 是否可以用于此用例。我看到有关使用 Privatelink 公开一个端点的文档,该端点转到 AWS 服务而不是自定义服务。

我在发送 http 请求时期待 elastic 的响应。当前发生的是我超时(无响应)。我认为我缺少一些配置来实际将请求从 VPC 端点的出口定向到弹性 ec2 实例。

amazon-web-services amazon-vpc vpc-endpoint aws-private-link
© www.soinside.com 2019 - 2024. All rights reserved.