Portal Apps

portal 같은 경우 크게 keyclock을 base로 하며 api / admin 등으로 구성되어 있다.

기존에는 ecs로 구성되어 있었으나 eks로도 구현을 해보도록 한다.

보통 순수하게 kubernetess로 pod(service)를 구동 할 경우 필요한 것은 아래와 같다.

  • deployment

  • service

  • ingress

custom 같은 경우 deployment는 argo-rollout 으로 대체 되었고

service나 ingress 설정은 helm chart로 구성 되어 있어 기본기를 알기가 어렵다.

portal 은 기본 yaml로만 최대한 구성 해보도록 한다.

일단 ecs 환경과 최대한 유사하게 구성 하기 위하여 ecs 내부에 있는 task definition 을 가져오자

  • stg-an-custom-portal-sso-web:6

{
    "taskDefinitionArn": "arn:aws:ecs:ap-northeast-2:123456789012:task-definition/stg-an-custom-portal-sso-web:6",
    "containerDefinitions": [
        {
            "name": "portal-sso-web",
            "image": "123456789012.dkr.ecr.ap-northeast-2.amazonaws.com/stg-portal-sso-web",
            "cpu": 0,
            "portMappings": [
                {
                    "name": "portal-sso-web-80-tcp",
                    "containerPort": 80,
                    "hostPort": 80,
                    "protocol": "tcp",
                    "appProtocol": "http"
                },
                {
                    "name": "portal-sso-web-443-tcp",
                    "containerPort": 443,
                    "hostPort": 443,
                    "protocol": "tcp",
                    "appProtocol": "http"
                }
            ],
            "essential": true,
            "environment": [
                {
                    "name": "JAVA_OPTS",
                    "value": "-Xms1024M -Xmx1740M"
                },
                {
                    "name": "PROFILE",
                    "value": "psstg"
                }
            ],
            "environmentFiles": [],
            "mountPoints": [],
            "volumesFrom": [],
            "ulimits": [],
            "logConfiguration": {
                "logDriver": "awslogs",
                "options": {
                    "awslogs-group": "/ecs/stg-an-custom-portal-sso-web",
                    "awslogs-create-group": "true",
                    "awslogs-region": "ap-northeast-2",
                    "awslogs-stream-prefix": "ecs"
                },
                "secretOptions": []
            },
            "systemControls": []
        }
    ],
    "family": "stg-an-custom-portal-sso-web",
    "taskRoleArn": "arn:aws:iam::123456789012:role/ecsTaskExecutionRole",
    "executionRoleArn": "arn:aws:iam::123456789012:role/ecsTaskExecutionRole",
    "networkMode": "awsvpc",
    "revision": 6,
    "volumes": [],
    "status": "ACTIVE",
    "requiresAttributes": [
        {
            "name": "com.amazonaws.ecs.capability.logging-driver.awslogs"
        },
        {
            "name": "ecs.capability.execution-role-awslogs"
        },
        {
            "name": "com.amazonaws.ecs.capability.ecr-auth"
        },
        {
            "name": "com.amazonaws.ecs.capability.docker-remote-api.1.19"
        },
        {
            "name": "com.amazonaws.ecs.capability.task-iam-role"
        },
        {
            "name": "ecs.capability.execution-role-ecr-pull"
        },
        {
            "name": "com.amazonaws.ecs.capability.docker-remote-api.1.18"
        },
        {
            "name": "ecs.capability.task-eni"
        },
        {
            "name": "com.amazonaws.ecs.capability.docker-remote-api.1.29"
        }
    ],
    "placementConstraints": [],
    "compatibilities": [
        "EC2",
        "FARGATE"
    ],
    "requiresCompatibilities": [
        "FARGATE"
    ],
    "cpu": "1024",
    "memory": "3072",
    "runtimePlatform": {
        "cpuArchitecture": "ARM64",
        "operatingSystemFamily": "LINUX"
    },
    "registeredAt": "2024-07-08T13:50:56.147Z",
    "registeredBy": "arn:aws:iam::123456789012:user/user@example.com",
    "tags": []
}

이 중에서 필요한 정보를 모두 k8s용 yaml로 변환 한다면 아래와 같다 docs\an-k8s\02.script\04.Application\portal

deployment.yaml

service.yaml

ingress.yaml

실행

success

alt text

특이사항

  • 타겟그룹에서 301이 발생 하여 success code를 200-399로 변경 하였다.

    • 아마도 키클락 내부에서 http으로 인입시 자체적으로 https로 리다이렉트 하는 것으로 보인다.

Last updated