Dangil project(15)

Junyoung·2024년 5월 23일

Dangil Project

목록 보기
15/20

Blue/Green 배포를 적용하고 외부 포트를 개방하지 않고 사용하려고 하니 문제가 존재했다.

헬스 체크시 젠킨스 내부에서 동일 네트워크내 Spring 컨테이너로 Health check 시에 해당 DNS 이름을 인식하지 못하는 문제였다.

health 체크를 젠킨스 내부에서 내부 네트워크로 생각하고

2024/05/07 12:50:47 [error] 11#11: *2 connect() failed (111: Connection refused) while connecting to upstream, client: 14.50.47.138, server: dangil.store, request: "GET /api/health HTTP/1.1", upstream: "http://172.25.0.8:8080/api/health", host: "dangil.store"

젠킨스에서 진행하는 헬스 체크가 이뤄지지 않는다 !

일반 클라이언트 주소로는 제대로 동작한다 !

아마 헬스체크 sh 하는 젠킨스에서 해당 요청이 내부 네트워크로 제대로 진입이 안되는거 같다 !

젠킨스 내부에서의 ping 을 확인해보면 정상적으로 DNS를 통해 스프링 블루가 인식되는걸 확인할수 있다

핑을 사용해 같은 네트워크의 DNS의 동작 확인이 가능하다 !

ping [컨테이너 이름]

하지만

curl -X GET "http://spring_blue:8080/api/health"

젠킨스에서 해당 요청을 날리면

해당 400 결과가 나오는것을 확인했다 !

따라서 문제가 존재한다 !

즉 curl 사용시 내부 네트워크를 타지 않고 가는것인거 같다 !

하지만 로그를 띄워보니 172.25.0.8 로 제대로 들어가는 것을 확인 !

즉 DNS를 받기는 한다 !

그럼 왜 못들어가니 ./. !!!!!

이상하다 DNS로 보내나 IP 로 보내나 같은 요청인데 200 400 왜 다르냐 ~!!!!!!!!!!!!!!!!!!!

nslookup spring_blue

이 IP에 이제 요청 보내는걸로 변경하자 !

젠킨스에 ping, nslookup을 사용해야 한다

ping, nslookup → 젠킨스 이미지에 추가한다

sudo apt-get update
sudo apt-get install dnsutils
sudo apt-get install iputils-ping

젠킨스에서 실행하는 sh 파일에 해당 로직을 추가했다 !

# DNS 조회를 통해 IP 주소 찾아내자아아아
IP_ADDRESS=$(nslookup spring_${AFTER_COLOR} | grep 'Address:' | tail -n1 | awk '{print $2}')

# Spring Server health checking
for retry_count in {1..60}
do
    # spring_blue or spring_green 컨테이너 이름을 적어주고 싶다 !
    # (curl) http 요청을 보내본다.
    response=$(curl -s http://${IP_ADDRESS}:8080/api/health)
    up_count=$(echo $response | grep 'isWorking' | wc -l)

됬습니다 드디어 !

profile
라곰

0개의 댓글