ECS Fargate 上部署 SkyWalking UI 并通过 ALB 提供服务

188 阅读2分钟

使用 AWS CLI 在 ECS Fargate 上部署 SkyWalking UI,并通过 Application Load Balancer (ALB) 提供公网访问入口,同时确保容器无法直接从公网访问。以下是详细步骤:

  1. 创建 ALB
    aws elbv2 create-load-balancer \
    --name skywalking-ui-alb \
    --scheme internet-facing \
    --type application \
    --subnets

记录返回的 ALB ARN,例如:arn:aws:elasticloadbalancing:us-east-1:123456789012:loadbalancer/app/skywalking-ui-alb/abcdef0123456789。

  1. 创建 ALB 目标组
    aws elbv2 create-target-group \
    --name skywalking-ui-alb-tg \
    --protocol HTTP \
    --port 8080 \
    --vpc-id \
    --target-type ip

记录返回的目标组 ARN,例如:arn:aws:elasticloadbalancing:us-east-1:123456789012:targetgroup/skywalking-ui-alb-tg/abcdef0123456789。

  1. 创建 ALB 监听器
    aws elbv2 create-listener \
    --load-balancer-arn \
    --protocol HTTP \
    --port 80 \
    --default-actions Type=forward,TargetGroupArn=

  2. 创建任务定义 JSON 文件 (skywalking-ui-task.json)
    {
    "family": "skywalking-ui-task",
    "executionRoleArn": "ecsTaskExecutionRole",
    "networkMode": "awsvpc",
    "containerDefinitions": [
    {
    "name": "skywalking-ui",
    "image": "apache/skywalking-ui:9.1.0",
    "portMappings": [
    {
    "containerPort": 8080,
    "hostPort": 8080,
    "protocol": "tcp"
    }
    ],
    "environment": [
    {
    "name": "SW_OAP_ADDRESS",
    "value": "dev-skywalking-oap-server.skywalking-oap.local:12800"
    }
    ],
    "logConfiguration": {
    "logDriver": "awslogs",
    "options": {
    "awslogs-create-group": "true",
    "awslogs-group": "/ecs/skywalking-ui",
    "awslogs-region": "us-east-1",
    "awslogs-stream-prefix": "ecs"
    }
    }
    }
    ],
    "requiresCompatibilities": [
    "FARGATE"
    ],
    "cpu": "512",
    "memory": "1024"
    }

  3. 注册任务定义
    aws ecs register-task-definition --cli-input-json file://skywalking-ui-task.json

记录返回的任务定义 ARN,例如:arn:aws:ecs:us-east-1:123456789012:task-definition/skywalking-ui-task:1。

  1. 创建 ECS 服务
    创建一个名为 skywalking-ui-service.json 的文件,内容如下:

{
"cluster": "",
"serviceName": "skywalking-ui-service",
"taskDefinition": "",
"desiredCount": 1,
"deploymentConfiguration": {
"maximumPercent": 200,
"minimumHealthyPercent": 100
},
"launchType": "FARGATE",
"schedulingStrategy": "REPLICA",
"networkConfiguration": {
"awsvpcConfiguration": {
"subnets": [
"",
""
],
"securityGroups": [
""
],
"assignPublicIp": "DISABLED"
}
},
"loadBalancers": [
{
"targetGroupArn": "",
"containerName": "skywalking-ui",
"containerPort": 8080
}
]
}

  1. 创建服务
    aws ecs create-service --cli-input-json file://skywalking-ui-service.json

  2. 验证服务状态
    aws ecs describe-services --cluster --services skywalking-ui-service

确保服务状态为 RUNNING。

  1. 获取 ALB DNS 名称或 IP 地址
    aws elbv2 describe-load-balancers --names skywalking-ui-alb

在输出中找到 DNSName 或 IPAddress。

  1. 访问 SkyWalking UI
    通过 http:// 访问 SkyWalking UI。

通过以上步骤,您已经成功部署了 SkyWalking UI,并通过 ALB 提供了公网访问入口。同时,由于容器没有分配公网 IP 地址,因此无法直接从公网访问容器。所有流量都需要通过 ALB 进行路由。

在生产环境中,您可能需要采取额外的安全措施,例如为 ALB 配置 SSL/TLS 终止、启用健康检查等。同时,也建议定期检查和更新 SkyWalking 版本,以获取最新的功能和安全更新。