MultiCloud, Jenkins, AWS ECR 문제 해결기: 실전에서 배운 교훈

2024. 2. 18. 22:25DevOps

728x90

0.

폐쇄망 환경에서 CI/CD 파이프라인 구성을 하면서 겪은 문제 해결과정을 기록해봅니다.

다른 클라우드와 AWS가 직접 연결되어있는 상태입니다.

타 클라우드 내 인스턴스에 Jenkins와 Harbor가 설치되어 있고 AWS에서는 EKS와 ECR을 사용했습니다.

 

jenkins에서 빌드를 성공하고 docker build 후 ecr에 푸시를 하려고 하니 젠킨스 플러그인에서 에러가 발생했습니다.

발생한 에러 메시지

Error: “trustAnchors parameter must be non-empty”

검색결과는 java 버전문제, jenkins의 jdk문제, aws cli 문제, java jvm의 ssl 문제등이 원인이라고 했지만

실제 해결은 jenkins가 설치된 VM에서 aws cli를 설치하고 명령어가 잘 실행되는지 확인하면서 진행했습니다.

 

1. 방화벽 설정으로 인한 접근 문제

VM에 설치된 jenkins 위에서 디버깅은 쉽지 않고, 정확한 레이어를 확인할 수 없었다.

VM에서 ping nslookup curl telnet dig awscli 같은 명령어들로 통신 문제를 파악했다.

아예 timeout이 나는것을 확인하고 방화벽 문제라고 판단

양쪽 클라우드에서 방화벽, 보안그룹 등을 업데이트하고 응답이 잘 되는지 확인했다.

  • 문제 상황 설명: 통신 장애의 진단, 방화벽으로 인한 접근 거부
  • 해결 방법: 네트워크 구성 검토, 보안 그룹, 방화벽 설정

 

2. AWS ECR과의 통신 문제 해결

클라우드간의 통신은 성공했으나 ECR 엔드포인트로 연결이 실패했다.

AWS PrivateLink VPC Endpoints를 설정해주고 해당 DNS를 설정해주었다.

privateLink

etc/hosts 수정

https://docs.aws.amazon.com/ko_kr/vpc/latest/privatelink/what-is-privatelink.html

https://docs.aws.amazon.com/AmazonECS/latest/developerguide/vpc-endpoints.html

  • 문제 상황 설명: 방화벽 규칙으로 인한 접근 거부
  • 해결 방법: DNS 설정, VPC 피어링

 

3. ECR 권한 문제 해결

타 클라우드에서 AWS 권한을 사용하기위해 Accesskey와 Secretkey를 사용했다.

그리고 ECR repo로 들어가서 권한을 수정해주었다.

https://docs.aws.amazon.com/ko_kr/AmazonECR/latest/userguide/repository-policy-examples.html

  • 문제 상황 설명: ECR 리포지토리 접근 권한 오류
  • 해결 방법: IAM 정책 및 역할 설정 검토

 

4. 도커와 ECR 간의 통합 문제

VM에서 awscli를 통한 ECR명령어가 잘 수행되는것을 확인하고 jenkins에서 다시 테스트했습니다.

aws ecr get-login-password --region region | docker login --username AWS --password-stdin aws_account_id.dkr.ecr.region.amazonaws.com


docker push

docker login은 성공했는데 docker push에서 no basic auth credentials 에러가 발생했습니다.

여기서 꽤 오랜시간을 헤맸습니다.

원인은 docker login으로 변경된 docker config.json 과 docker 명령어가 사용하는 config.json의 위치가 달랐기 때문이었습니다.

하나는 루트경로의 docker, 다른 하나는 현재 경로의 docker였던거죠...

jenkins와 docker 설정을 처음부터 잘 해놨더라면 피할 수 있었겠지만

설정을 다른 사람이 해놓고 변경이 빈번하게 일어나던 상황이었습니다.

 

  • 문제 상황 설명: 도커 이미지 푸시 및 풀 오류
  • 해결 방법: 도커 로그인 문제 해결, 이미지 태그 및 리포지토리 설정

 

5. Jenkins에서 AWS ECR 작업 중 발생한 그 외 문제

추가로 문제를 해결하기 위해 찾으면서 발견한 발생한, 발생 가능한 실수들을 적어봅니다.

1. ECR 주소를 잘못적는경우
꽤 많습니다. 특히 폐쇄망이기 때문에 주소를 복사해오지 않고, 직접 타이핑하면서 실수가 발생합니다.

2. ECR 주소에 대소문자, - , _ 등이 있는 경우
docker, aws cli 자체로는 문제가 없지만, jenkins 플러그인 같은 커스텀한 기능을 구현하다가 문제가 생길 수 있다고 합니다.

3. AWS region 문제
네. aws 리전을 잘 확인합시다.

4. aws ecr login credential을 직접 저장한경우
해당 크레덴셜은 시간이 지나면 expired 됩니다.
커스텀하게 구축한 하버같은 image 저장소는 영구적인 키값으로 픽스해서 테스트 하시는 분들이 있더라구요.

5. jenkins에서 도커의 권한문제

6. 보안그룹 오타...

 

결론

경험많은 솔루션 아키텍트분과 작업을 해서 다행히 많은 도움을 받을 수 있었습니다.

혼자였다면 해결하는데 훨씬 많은 시간이 들었을듯합니다.

문제는 고통스럽지만 검색해도 나오지 않는 문제를 해결하는 경험은 정말 소중하네요.
힘들지않으면 크게 기쁘지 않은것 같기도 하고요.

728x90

'DevOps' 카테고리의 다른 글

2023년 3년차 데브옵스 엔지니어 이직 도전기  (0) 2023.09.20
helm vs kustomize  (0) 2023.08.21