Назад | Перейти на главную страницу

Балансировщик нагрузки Amazon ECS, настроенный на порт 9090, не работает

Я создал классический балансировщик нагрузки в Amazon Web Services и присвоил порту прослушивателя 9090. Я связал балансировщик нагрузки с кластером с двумя экземплярами EC2. Я также привел входящие правила для экземпляров для 9090.

А чтобы создать службу в кластере, я создал определение задачи следующим образом.

{
  "family": “my-spring-task“,
  "containerDefinitions": [{
    "image": “my-docker-group/my-spring-app“,
    "name": "my-spring-app",
    "cpu": 10,
    "memory": 256,
    "essential": true,
    "portMappings": [{
      "containerPort": 9090,
      "hostPort": 9090
    }]
  }]
}

Затем я создаю сервис с приведенным выше определением задачи.

aws ecs register-task-definition --cli-input-json file://service90-task.json

aws ecs create-service --cluster service90-cluster --service-name service90-service --load-balancers loadBalancerName=service90-load-balancer,containerName=my-spring-app,containerPort=9090 --task-definition service90-task  --role ecs-service-role --desired-count 0

Я планирую запустить проект Spring Boot, который построен с помощью плагина gradle и docker.

У меня есть проект, на котором запущен порт 8080. И он работает, как ожидалось. Но когда я пытаюсь запустить службу на порту 9090, она не работает из-за сбоя проверки работоспособности.

Мне нужен совет, как сделать порт 9090. или любой номер порта.

Скорее всего, порт внутри контейнера по-прежнему 8080, если вы не перенастроили саму весеннюю загрузку для использования 9090. В этом сценарии вы захотите установить для containerPort значение 8080 и оставить hostPort на 9090.

В качестве альтернативы вы можете оставить hostPort пустым, и ECS назначит случайный «высокий» порт каждому контейнеру, а затем присоединит его к ALB. Это избавляет вас от необходимости отображать назначения портов в кластере ECS, и на одном хосте могут работать несколько экземпляров одного и того же контейнера.