CI/CD(6) : ArgoCD with Reverse Proxy

NOHHYEONGJUN·2024년 10월 5일

CI/CD

목록 보기
7/15

ArgoCD

Kubernetes 애플리케이션의 자동 배포를 위한 오픈소스
클러스터에 배포된 애플리케이션의 CI/CD 파이프라인에서 CD를 담당


 

 


0. 현재 상황

현재 상황이다..
외부에서 하나의 공인 IP하나의 Port로만 접속이 가능한 상황이다.
ArgoCD 또한 Reverse Proxy를 이용해 접속해야 한다. (슬픈 상황..)


 

 


1. ArgoCD 설치

ubuntu 24.04 에서 진행

kubectl create namespace argocd

kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml

 

 


2. ArgoCD Ingress 배포

# argocd-ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: argocd-ingress
  namespace: argocd
  annotations:
    kubernetes.io/ingress.class: "nginx"
    alb.ingress.kubernetes.io/ssl-passthrough: "true"
    nginx.ingress.kubernetes.io/force-ssl-redirect: "false"
    nginx.ingress.kubernetes.io/backend-protocol: "HTTP"
spec:
  rules:
  - http:
      paths:
      - pathType: Prefix
        path: /argocd
        backend:
          service:
            name: argocd-server
            port:
              name: http
    host: argo.org.local
kubectl apply -f argocd-ingress.yaml

 

 


3. ArgoCD config 수정

kubectl edit configmap argocd-cmd-params-cm -n argocd


data:
  server.insecure: "true"
  server.rootpath: "/argocd"
  server.basehref: "/argocd"

api version 하단에 내용 추가 및 저장

kubectl rollout restart deployment argocd-server -n argocd

 

 


4. ArgoCD 서비스 타입 변경

kubectl patch svc argocd-server -n argocd -p '{"spec": {"type": "NodePort"}}'
kubectl get svc -n argocd

NAME                                      TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                      AGE
argocd-applicationset-controller          ClusterIP   10.108.173.90    <none>        7000/TCP,8080/TCP            119m
argocd-dex-server                         ClusterIP   10.105.209.145   <none>        5556/TCP,5557/TCP,5558/TCP   119m
argocd-metrics                            ClusterIP   10.100.97.133    <none>        8082/TCP                     119m
argocd-notifications-controller-metrics   ClusterIP   10.100.239.62    <none>        9001/TCP                     119m
argocd-redis                              ClusterIP   10.107.175.183   <none>        6379/TCP                     119m
argocd-repo-server                        ClusterIP   10.108.105.140   <none>        8081/TCP,8084/TCP            119m
argocd-server                             NodePort    10.106.35.203    <none>        80:31195/TCP,443:30791/TCP   119m
argocd-server-metrics                     ClusterIP   10.107.207.161   <none>        8083/TCP                     119m

argocd-server의 타입 변경 완료. (노드 포트 확인)


 

 


4. Reverse Proxy 설정

그림의 Nginx Server에서 진행

sudo vi /etc/nginx/sites-available/default


upstream kubernetes_argocd {
        server 10.0.0.2:31195;
        server 10.0.0.3:31195;
        server 10.0.0.4:31195;
}

server {
        listen 8080;
        server_name _;

        location / {
                proxy_pass http://kubernetes_backend;
                proxy_set_header Host $host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header X-Forwarded-Proto $scheme;

                proxy_hide_header Content-Type;
                add_header Content-Type text/html;
                add_header X-Content-Type-Options nosniff;

                proxy_buffers 16 16k;
                proxy_buffer_size 16k;

        }


        location /argocd/ {
                proxy_pass http://kubernetes_argocd;
                proxy_set_header Host $host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header X-Forwarded-Proto $scheme;
                proxy_ssl_verify off;

                proxy_buffers 16 16k;
                proxy_buffer_size 16k;


                proxy_read_timeout 300s;  
                proxy_send_timeout 300s;   

                proxy_redirect off;
                sub_filter '<base href="/"' '<base href="/argocd/"';
                sub_filter_once on;
        }

}

최 하단에 추가

sudo systemctl restart nginx

 

cat /var/log/nginx/error.log

→ 오류 발생 시 로그 확인


 

 


5. ArgoCD 접속

http://112.xxx.xxx.xxx:10005/argocd/ 로 접속

초기 비밀번호 확인

kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d && echo

 

 


6. Trouble Shooting

 

Failed to resync revoked tokens ERROR

kubectl logs argocd-server 
~~
time="2024-10-05T13:40:32Z" level=warning msg="Failed to resync revoked tokens. retrying again in 1 minute: dial tcp: lookup argocd-redis: i/o timeout"

 

해결 방법

kubectl get po -n kube-system

kubectl delete po core-dns -n kube-system x 2

kubectl delete po dex-server
kubectl delete po application-controller
kubectl delete po redis
kubectl delete po server 

 

 


이건 Prod 용 배포가 아니다!
보안적인 요소는 전부 배제하고 http로 진행했으니, Prod 배포를 원한다면 이 글을 참고하면 안된다!

실제 운영 환경에서는
HTTPS 사용, 적절한 인증 및 권한 설정, 네트워크 보안 강화 등 추가적인 보안 조치가 필요하다!

profile
Cloud/DevOps & Network Virtualization에 관심 있는 대학생입니다. 🐳

0개의 댓글