티스토리 뷰
개요
- 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
링크
TAG
- node.js
- chrome
- DynamoDB
- spring
- 자전거
- Tomcat
- jstl
- kotlin
- 태그를 입력해 주세요.
- CentOS
- Kendo UI Web Grid
- MySQL
- maven
- bootstrap
- jpa
- 알뜰폰
- 구동계
- graylog
- Kendo UI
- Eclipse
- JavaScript
- java
- 로드 바이크
- jsp
- JHipster
- 로드바이크
- Spring MVC 3
- 평속
- Docker
- Spring Boot
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함