Кластер ECS не может запускать задачи в частной подсети при использовании EC2

65
8

У меня есть определение задачи, настроенное на использование сетевого режима awsvpc. в соответствии с этим:

Для режима сети awsvpc поддерживаются только частные подсети. Поскольку задачи не получают общедоступные IP-адреса, для исходящего доступа в Интернет требуется шлюз NAT, а входящий интернет-трафик должен направляться через балансировщик нагрузки.

Я настроил шлюз NAT в общедоступной подсети (в которой есть интернет-шлюз) и настроил таблицу маршрутов в частной подсети для отправки трафика на шлюз NAT. Но когда я хочу создать задачу, которая находится в частной подсети, я получаю:

Run tasks failed Reasons : ["ATTRIBUTE"]. Learn more

Если я выберу общедоступную подсеть, которую использует сам EC2, она создаст задачу. Но я не могу получить доступ к Интернету внутри своих задач.
Моя конечная цель - получить доступ к Интернету из моих задач в EC2.

ОБНОВЛЕНИЕ: мое определение задачи:

{
"ipcMode": null,
"executionRoleArn": "arn:aws:iam::783294628224:role/ecsTaskExecutionRole",
"containerDefinitions": [
{
"dnsSearchDomains": null,
"logConfiguration": {
"logDriver": "awslogs",
"options": {
"awslogs-group": "/ecs/TEST-Task-Definition",
"awslogs-region": "us-west-2",
"awslogs-stream-prefix": "ecs"
}
},
"entryPoint": null,
"portMappings": [
{
"hostPort": 8500,
"protocol": "tcp",
"containerPort": 8500
},
{
"hostPort": 8501,
"protocol": "tcp",
"containerPort": 8501
}
],
"command": null,
"linuxParameters": null,
"cpu": 0,
"environment": [],
"resourceRequirements": null,
"ulimits": null,
"dnsServers": null,
"mountPoints": [],
"workingDirectory": null,
"secrets": null,
"dockerSecurityOptions": null,
"memory": null,
"memoryReservation": 500,
"volumesFrom": [],
"stopTimeout": null,
"image": "<MY ECR REPOSITORY ADDRESS FOR IMAGE 1>",
"startTimeout": null,
"dependsOn": null,
"disableNetworking": null,
"interactive": null,
"healthCheck": null,
"essential": true,
"links": null,
"hostname": null,
"extraHosts": null,
"pseudoTerminal": null,
"user": "root",
"readonlyRootFilesystem": null,
"dockerLabels": null,
"systemControls": null,
"privileged": true,
"name": "backend"
},
{
"dnsSearchDomains": null,
"logConfiguration": {
"logDriver": "awslogs",
"options": {
"awslogs-group": "/ecs/TEST-Task-Definition",
"awslogs-region": "us-west-2",
"awslogs-stream-prefix": "ecs"
}
},
"entryPoint": null,
"portMappings": [
{
"hostPort": 80,
"protocol": "tcp",
"containerPort": 80
}
],
"command": null,
"linuxParameters": null,
"cpu": 0,
"environment": [],
"resourceRequirements": null,
"ulimits": null,
"dnsServers": null,
"mountPoints": [],
"workingDirectory": null,
"secrets": null,
"dockerSecurityOptions": null,
"memory": null,
"memoryReservation": 500,
"volumesFrom": [],
"stopTimeout": null,
"image": "<MY ECR REPOSITORY ADDRESS FOR IMAGE 2>",
"startTimeout": null,
"dependsOn": null,
"disableNetworking": null,
"interactive": null,
"healthCheck": null,
"essential": true,
"links": null,
"hostname": null,
"extraHosts": null,
"pseudoTerminal": null,
"user": "root",
"readonlyRootFilesystem": null,
"dockerLabels": null,
"systemControls": null,
"privileged": true,
"name": "frontend"
}
],
"memory": null,
"taskRoleArn": "arn:aws:iam::783294628224:role/ecsTaskExecutionRole",
"family": "TEST-Task-Definition",
"pidMode": null,
"requiresCompatibilities": [
"EC2"
],
"networkMode": "awsvpc",
"cpu": null,
"proxyConfiguration": null,
"volumes": [],
"placementConstraints": []
}

спросил(а) 2021-01-19T16:24:40+03:00 9 месяцев, 1 неделя назад
1
Решение
103

Мне наконец удалось решить мою проблему. Насколько я знаю, при использовании сетевого режима awsvpc в определении задач, задачи (или служба) должны создаваться в подсети EC2. Кроме того, если вы хотите, чтобы ваши задачи имели доступ к Интернету, вы должны создать шлюз NAT в другой подсети, который имеет маршрут по умолчанию к интернет-шлюзу, который находится в вашем VPC. В подсети task/service/EC2 необходимо добавить маршрут по умолчанию к шлюзу NAT. Единственная проблема, которая возникает, это то, что вы больше не можете подключиться к своему EC2. Если вы хотите подключить ssh к вашему EC2, я думаю, вам следует настроить балансировщик нагрузки.

ответил(а) 2021-01-19T16:24:40+03:00 9 месяцев, 1 неделя назад
47

Если вы не используете https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-optimized_AMI.html


Убедитесь, что вы установили ключ среды ECS_ENABLE_TASK_ENI параметра ECS_ENABLE_TASK_ENI в значение true

ответил(а) 2021-01-19T16:24:40+03:00 9 месяцев, 1 неделя назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема