Как я могу прочитать экземпляр RDS из модуля EKS?

Цель

Моя цель — подключиться к базе данных RDS (Postgres) из модуля, работающего в кластере AWS EKS. Я использую Terraform для подготовки, но не обязательно ищу решение для кода Terraform.

Что я пробовал

Я создал базу данных (урезал настройки, такие как пароль, имя пользователя и т. д.), например:

resource "aws_db_instance" "rds-service" {
  name                  = "serviceDB"
  engine                = "postgres"
  db_subnet_group_name  = aws_db_subnet_group.service_subnet_group.name
  }

Затем создал группу безопасности, чтобы разрешить трафик

resource "aws_security_group" "db" {
  name   = "service-rds-access"
  vpc_id = module.vpc.vpc_id

  ingress {
    description = "Postgres from VPC"
    from_port   = 5432
    to_port     = 5432
    protocol    = "tcp"
    cidr_blocks = ["0.0.0.0/0"]
  }
}

Который использует группу подсетей, которую я создал (обратите внимание, что RDS развертывается только в частных подсетях, и я использовал те же подсети, которые являются подмножеством подсетей, которые я использовал для развертывания моей службы в EKS)

resource "aws_db_subnet_group" "service_subnet_group" {
  name       = "service-subnet-group"
  subnet_ids = [module.vpc.subnet_a_private_id, module.vpc.subnet_b_private_id]
}

Что не работает

При попытке подключения из модуля я не могу подключиться к RDS. Я также попытался установить оболочку в модуль и попытаться вручную подключиться к экземпляру RDS, например:

Запустив psql --version я получил: psql (PostgreSQL) 11.9, а затем, когда я попытался аутентифицироваться через psql вроде:

psql --host=$HOST_NAME --port=5432 --username=$USER_NAME --password --dbname=postgres

Я получил (редактирование мое):

psql: could not connect to server: Connection timed out
    Is the server running on host "<hostname>.amazonaws.com" <IP> and accepting
    TCP/IP connections on port 5432?
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
0
1 614
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вы можете использовать следующие параметры для поиска основной причины;

  1. Используйте Анализатор достижимости VPC: создайте и проанализируйте путь с сетевыми интерфейсами типа «Источник» и «Источник» в качестве идентификатора сетевого интерфейса ec2/узла, на котором развернуты ваши модули. Кроме того, выберите «Тип назначения» в качестве «Сетевые интерфейсы» и «Назначение» в качестве идентификатора сетевого интерфейса экземпляра БД RDS. Укажите порт назначения как 5432, оставьте протокол как TCP. Затем выполните анализ пути. Если у вас есть несколько ec2/nodes для модулей, я предполагаю, что эти ec2/nodes имеют одинаковую настройку.

Примечание*: Для завершения этого анализа пути требуется несколько минут.

ИЛИ

  1. Если вы включили журналы потоков VPC, вы можете отслеживать журналы потоков vpc, чтобы проверить, какой ресурс aws отклоняет сетевой трафик. Информацию о журналах потоков VPC см. в этом документе от AWS.

Кроме того, проверьте журналы потоков VPC сетевых интерфейсов AWS lambda EC2 модулей и экземпляра БД RDS.

Благодаря подсказке от amitd у меня появилось больше информации об отладке проблемы. Я пропустил присоединение созданного мной vpc_security_group_ids к ресурсу RDS. Поэтому добавление vpc_security_group_ids = [aws_security_group.db.id] решило проблему для меня.

Другие вопросы по теме