Конфигурация EKS: шлюз API и модули в частных подсетях

В AWS я пытаюсь настроить свой кластер K8S с помощью EKS, и из-за моего ограниченного опыта работы с AWS и его сервисами я изо всех сил пытаюсь настроить интеграцию между различными частями.

Контекст:

  • Создал кластер с помощью инструмента eksctl (VPC, подсети и шлюз NAT были созданы автоматически с помощью eksctl).
  • Созданы две группы узлов (также с eksctl), одна в частной подсети, а другая в общедоступной подсети.
  • Создал развертывание для моего внутреннего приложения (развернув его в частной подсети):

apiVersion: apps/v1
kind: Deployment
metadata:
  name: api-dev-deployment
  namespace: dev
spec:
  replicas: 1
  selector:
    matchLabels:
      app: api-dev
  template:
    metadata:
      labels:
        app: api-dev
    spec:
      nodeSelector:
        subnet-type: private
      containers:
        - name: api-dev
          image: [my private image URL from ECR]
          ports:
              - containerPort: 5000

Развертывание модуля в порядке, и он может подключаться к Интернету из частной подсети (подключение к mongodb atlas в моем случае), поэтому шлюз NAT здесь работает нормально.

Чего я пытаюсь достичь:

  • Настройте шлюз API, чтобы он мог отправлять запросы в приложение, развернутое в модуле внутри частной подсети.

Что я сделал:

  • Создал API в службе шлюза API, создал ресурс /status (конечная точка проверки работоспособности из моего приложения) методом GET.
  • В интеграции запроса я выбрал HTTP в качестве типа интеграции и установил значение http://192.168.98.28:5000/status в качестве URL-адреса конечной точки (192.168.98.28 — это внутренний IP-адрес моего модуля в частной сети, полученный с помощью kubectl: kubectl get pods -o wide)

Что происходит не так:

Когда я пытаюсь выполнить тестовый вызов конечной точки шлюза API, я получаю сообщение об ошибке 500:

Сб, 5 августа, 16:33:18 UTC 2023: выполнение не удалось из-за ошибки конфигурации: недопустимый адрес конечной точки.

Может ли кто-нибудь помочь мне в настройке вышеупомянутого? Я просмотрел много документации, но не могу найти хорошую.

Я не уверен, что можно получить ответ от модуля напрямую без service. Когда вы создаете сервис для предоставления развертывания, он запускает балансировщик нагрузки aws. Вы получите ответ от этого балансировщика нагрузки.

Rafaf Tahsin 06.08.2023 07:40
Стоит ли изучать 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 называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
1
50
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Я думаю, что в первую очередь вам нужен сервис типа Loadbalancer для выставления вашего модуля, я также думаю, что и шлюз API, и кластер EKS находятся в разных VPC, поэтому подключить их без конечных точек VPC невозможно.

Таким образом, внешний трафик будет направляться через API-шлюз, который отправляет трафик на службы, размещенные внутри EKS, через VPC Private Link -> ELB.

Вот блог для ознакомления

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