티스토리 뷰

개요

  • Amazon ECS on Fargate 환경에서는 Eureka Server를 작동시키는 것이 까다로운 편이다. Eureka Client는 내부적으로 자신의 호스트명으로부터 프라이빗 IP 주소를 획득하고 이것을 Eureka Server에게 알리는 원리인데, ECS Fargate 환경에서는 프라이빗 IP 주소 획득이 정상적으로 동작하지 않아 우회 방법이 필요하다.

Dockerfile

  • Dockerfile 파일을 아래와 같이 작성한다. 베이스 이미지에 ECS 메타 정보 획득을 위한 curl, jq를 설치하고 아래 작성할 커스텀 entrypoint.sh를 주입하기 위한 목적이다.
FROM docker.io/jhipster/jhipster-registry:v7.1.0
ENV SPRING_OUTPUT_ANSI_ENABLED=ALWAYS
USER root
RUN apt update -y
RUN apt install curl jq -y
COPY entrypoint.sh /
EXPOSE 8761
ENTRYPOINT ["sh", "/entrypoint.sh"]

entrypoint.sh

  • 다음으로 entrypoint.sh 파일을 작성한다. ECS Fargate가 제공하는 ECS_CONTAINER_METADATA_URI 환경 변수를 이용하여 프라이빗 IP 주소를 획득하고, hostname 명령으로 호스트명을 획득하여 둘을 맵핑한 정보를 /etc/hosts 파일에 갱신하는 역할을 수행한다.
#!/bin/sh
export ECS_INSTANCE_IP_TASK=$(curl --retry 5 -connect-timeout 3 -s ${ECS_CONTAINER_METADATA_URI})
export ECS_INSTANCE_HOSTNAME=$(cat /proc/sys/kernel/hostname)
export ECS_INSTANCE_IP_ADDRESS=$(echo ${ECS_INSTANCE_IP_TASK} | jq -r '.Networks[0] | .IPv4Addresses[0]')
echo "${ECS_INSTANCE_IP_ADDRESS} ${ECS_INSTANCE_HOSTNAME}" | tee -a /etc/hosts
echo "ECS_INSTANCE_HOSTNAME: " ${ECS_INSTANCE_HOSTNAME}
echo "ECS_INSTANCE_IP_ADDRESS: " ${ECS_INSTANCE_IP_ADDRESS}
echo "JHipster Registry will start in ${JHIPSTER_SLEEP}s..." && sleep ${JHIPSTER_SLEEP}
set -x
exec java ${JAVA_OPTS} -noverify -XX:+AlwaysPreTouch -Djava.security.egd=file:/dev/./urandom -cp /app/resources/:/app/classes/:/app/libs/* "tech.jhipster.registry.JHipsterRegistryApp" "$@"

환경 변수

  • 아래는 1번 서버의 환경 변수이다.
SPRING_PROFILES_ACTIVE=prod
SPRING_MAIN_BANNER-MODE=off
SPRING_SECURITY_USER_PASSWORD=admin
JHIPSTER_REGISTRY_PASSWORD=admin
JHIPSTER_SECURITY_AUTHENTICATION_JWT_BASE64_SECRET={secret}
JHIPSTER_REGISTRY_HOST_1=reg-int-1.foobar.com
JHIPSTER_REGISTRY_HOST_2=reg-int-2.foobar.com
EUREKA_INSTANCE_PREFER_IP_ADDRESS=true
EUREKA_INSTANCE_IP_ADDRESS=${ecs-instance-ip-address:127.0.0.1}
EUREKA_CLIENT_SERVICE_URL_DEFAULTZONE=http://admin:${jhipster-registry-password}@${jhipster-registry-host-2}:8761/eureka/
  • 2번 서버는 모든 내용이 동일하며 EUREKA_CLIENT_SERVICE_URL_DEFAULTZONE 항목만 다르다.
EUREKA_CLIENT_SERVICE_URL_DEFAULTZONE=http://admin:${jhipster-registry-password}@${jhipster-registry-host-1}:8761/eureka/
댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함