CI/CD(7) : ArgoCD - Harbor 연동

NOHHYEONGJUN·2024년 10월 6일

CI/CD

목록 보기
8/15

1. 상황

현재 상황이다.
ArgoCD가 Harbor에 접근하기 위해 VPN, Tunneling을 사용하는게 좋지만, 급한대로 ngrok을 이용했다. (사실 같은 VPN에 띄우는게 좋다고 생각한다.)


 

 


2. Secret 추가

ArgoCD가 결국 Harbor에 접근하기 위해서는 권한이 필요하다.
Harbor에 로그인 하기 위한 ID, PASSWORD가 필요하다.

 

1. id:password - base64 인코딩

echo -n 'id:pw' | base64

a234df3anVusdfdfsdusdf234h

 

2. json - base64 인코딩

vi secret.json
{"auths": {"0c6sdfa53453sddff.ngrok.app": {"auth": "a234df3anVusdfdfsdusdf234h"}}}
cat secret.json | base64

eyJhdXsdf234sdI2ZmE1Mjg4OWJmsdfjk32sdflkjV0aCI6ICJhSGxsYjI1bmFuVnsdf234sdmNoIn19fQoK

0b6fa53453sddff.ngrok.app : Harbor의 url. https, http는 제외하고 입력.
aHllsdf3anVusdfdfsduczU2Mzch : 앞서 인코딩한 id:password. 인코딩한 값을 다시 인코딩 한다는 것에 주의!

 

3. secret 작성 및 적용

vi secret-harbor.yaml
apiVersion: v1
kind: Secret
data:
  .dockerconfigjson: eyJhdXsdf234sdI2ZmE1Mjg4OWJmsdfjk32sdflkjV0aCI6ICJhSGxsYjI1bmFuVnsdf234sdmNoIn19fQoK
metadata:
  namespace: default
  name: secret-harbor
type: kubernetes.io/dockerconfigjson
kubectl apply -f secret-harbor.yaml

🚨 주의! : namespace는 Image를 사용하는 서비스가 배포될 namespace를 지정. argocd 아님! 🚨

 

4. deploy 적용

 

서비스 배포를 위한 deploy를 수정해야 한다. (나의 경우 argocd에 연결된 github repo의 deploy)

apiVersion: apps/v1
kind: Deployment
metadata:
  name: frontend
spec:
  replicas: 3
  selector:
    matchLabels:
      app: frontend
  template:
    metadata:
      labels:
        app: frontend
    spec:
      imagePullSecrets:
      - name: secret-harbor
      containers:
      - name: frontend
        image: 0c6sdfa53453sddff.ngrok.app/project/frontend:v1
        ports:
        - containerPort: 80

imagePullSecrets: secret에 작성한 name을 입력. 이를 기반으로 harbor에 접근!


 

 


ngrok 사용 시 주의 사항

ngrok 사용 시, https의 접속 가능한 url을 제공해준다.
하지만, harbor 서버의 harbor.yaml의 host : 에는 private IP로 기입되어 있다.
따라서 host를 ngrok의 주소의 https를 제외한 값으로 수정해주어야 한다.

 

수정 후

sudo docker-compose down

sudo docker-compose up -d
profile
Cloud/DevOps & Network Virtualization에 관심 있는 대학생입니다. 🐳

0개의 댓글