Как предоставить сетевой доступ к Mongo Atlas для развертывания на EKS.

Вопрос или проблема

проблема:

У меня есть приложение, работащее на кластере EKS, которое должно подключаться к базе данных MongoDB Atlas.

Я должен предоставить приложению, работающему в кластере EKS, сетевой доступ, указав его IP-адрес.

Я не знаю IP-адрес сервиса/развертывания приложения внутри кластера.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
spec:
  replicas: 3
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
      - name: my-app
        image: my-app-image:latest
        env:
        - name: MONGO_URI
          value: "mongodb+srv://<username>:<password>@cluster0.mongodb.net/my-db?retryWrites=true&w=majority"
        ports:
        - containerPort: 8080

Ответ или решение

Для обеспечения доступа приложения, развернутого в кластере EKS (Elastic Kubernetes Service), к базе данных MongoDB Atlas, необходимо понять архитектурные особенности работы Kubernetes и службы EKS. MongoDB Atlas использует строгие политики сетевой безопасности, которые требуют указания разрешенных IP-адресов для подключения к базе данных. Однако EKS динамически назначает IP-адреса для Pod’ов внутри кластера, что создает определенные сложности при добавлении этих IP-адресов в белый список MongoDB Atlas.

Теория

При работе с EKS все Pod’ы, размещенные внутри вашего кластера, имеют внутренние IP-адреса, которые могут меняться при каждом новом развертывании или пересоздании Pod’ов. Однако для соединения с внешними ресурсами, такими как MongoDB Atlas, используется выделение внешнего IP-адреса, который и необходимо добавить в список разрешенных IP-адресов на стороне MongoDB Atlas.

Одним из решений для данной задачи является использование Kubernetes Service с типом LoadBalancer. Это позволит назначить статический внешний IP-адрес, который можно будет безопасно добавить в белый список MongoDB Atlas.

Пример

  1. Создание LoadBalancer Service:

    Вам нужно создать сервис типа LoadBalancer, который будет предоставлять внешний доступ к вашему приложению. Обратите внимание, что служба LoadBalancer автоматически предоставляет внешний IP-адрес, который может быть использован для настроек безопасности MongoDB Atlas.

    Пример конфигурации:

    apiVersion: v1
    kind: Service
    metadata:
     name: my-app-service
    spec:
     type: LoadBalancer
     selector:
       app: my-app
     ports:
     - port: 8080
       targetPort: 8080

    После создания сервиса через команду kubectl apply -f service.yaml, вам будет назначен внешний IP-адрес. Этот адрес необходимо скопировать и использовать для настройки сетевого доступа в MongoDB Atlas.

  2. Настройка сетевого доступа в MongoDB Atlas:

    Перейдите в консоль управления MongoDB Atlas и выберите ваш кластер. Перейдите в раздел ‘Network Access’ и добавьте полученный внешний IP-адрес LoadBalancer в белый список. Это позволит вашему приложению в EKS подключаться к базе данных MongoDB Atlas.

Применение

Теперь, когда у вас есть внешний IP-адрес от Kubernetes LoadBalancer, он добавлен в сетевые настройки MongoDB Atlas, ваше приложение сможет безопасно подключаться к базе данных. Такой подход обеспечивает надежное и контролируемое подключение, ведь вы знаете IP-адрес, с которого происходят запросы к базе.

Кроме того, чтобы избежать лишних затрат, вы можете рассмотреть возможности внедрения архауса безопасности, когда поды и службы ограничены только необходимыми сетевыми взаимодействиями в пределах кластера и вне его. Это достигается с помощью Network Policies в Kubernetes, которые могут быть настроены для обеспечения сетевой безопасности, ограничивая исходящие и входящие соединения на уровне Pod’ов.

Также стоит рассмотреть использование VPC Peering, если ваш кластер EKS и кластер MongoDB Atlas размещены в одном облачном провайдере, таким образом сократив путь данных и увеличив безопасность передачи.

Следует помнить, что предоставленный IP-адрес LoadBalancer может измениться при изменениях конфигураций или пересоздании сервиса, поэтому рекомендуется мониторинг и автоматизация процесса обновления адресов в MongoDB Atlas. В контексте AWS можно использовать Elastic Load Balancer (ELB) с Elastic IP (EIP) для получения постоянного IP-адреса.

Оцените материал
Добавить комментарий

Капча загружается...