Кластер ECS не может запускать задачи в частной подсети при использовании EC2 - PullRequest
1 голос
/ 08 апреля 2019

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

Поддерживаются только частные подсети для режима сети 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": []
}

Ответы [ 2 ]

0 голосов
/ 09 апреля 2019

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

0 голосов
/ 08 апреля 2019

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

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

...