[英]AWS ECS: Cannot connect to webserver running in EC2 instance
我正在使用AWS CDK创建一个简单的基础设施:
我可以启动并运行它,但无法访问网络服务器(例如,通过在浏览器中访问 EC2 实例的 IP 或使用wget
),我不明白为什么我无法访问它。
我尝试/发现的事情:
AWS_VPC
和BRIDGE
.network 模式,结果相同(一切都在运行,但我无法连接到服务器)AWS_VPC
模式,我最终会得到与我的 EC2 实例关联的两个网络接口。 即使我确保两者都有允许传入端口 80 流量的安全组,我仍然无法直接连接到 EC2 实例。容器外的所有内容似乎都设置为能够通过 web 与 EC2 实例进行通信,因此我假设它与任务/容器本身有关。 我最好的猜测是它与任务的网络模式有关,但我还没有找到让我找到答案的配置或文档。
有谁知道为什么我无法访问此 EC2 实例? 或者有任何示例 CDK 脚本做类似的事情以供参考?
这是我期望生成可访问网络服务器(但没有)的最小 CDK 脚本,使用演示 nginx 容器作为 hello-world:
import {
Stack,
StackProps,
aws_ec2 as ec2,
aws_ecs as ecs,
} from 'aws-cdk-lib';
import { Construct } from 'constructs';
export class MyStack extends Stack {
constructor(scope: Construct, id: string, props?: StackProps) {
super(scope, id, props);
// VPC
const vpc = new ec2.Vpc(this, 'VPC', {
enableDnsSupport: true,
enableDnsHostnames: true,
subnetConfiguration: [{ name: 'PublicSubnet', subnetType: ec2.SubnetType.PUBLIC }],
});
// ECS
const cluster = new ecs.Cluster(this, 'Cluster', {
vpc,
capacity: {
instanceType: ec2.InstanceType.of(ec2.InstanceClass.T3, ec2.InstanceSize.NANO),
machineImage: ecs.EcsOptimizedImage.amazonLinux(),
desiredCapacity: 1,
},
});
cluster.connections.allowFromAnyIpv4(ec2.Port.tcp(80));
// TASK DEFINITION
const taskDefinition = new ecs.Ec2TaskDefinition(this, 'TaskDef', {
networkMode: ecs.NetworkMode.AWS_VPC,
});
const container = taskDefinition.addContainer('HelloWorldContainer', {
image: ecs.ContainerImage.fromRegistry('nginxdemos/hello'),
memoryReservationMiB: 256,
portMappings: [
{
containerPort: 80,
protocol: ecs.Protocol.TCP,
},
],
});
const service = new ecs.Ec2Service(this, 'Service', {
cluster,
taskDefinition,
});
service.connections.allowFromAnyIpv4(ec2.Port.tcp(80));
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.