0. ArgoCD 배포를 위한 사전 작업

Fargate 생성을 위해서는 앞서 말한 Fargate Profile이 필요하므로 AWS Cli를 이용하여 생성하고 argocd는 argocd namespace에 생성이 되므로 해당 namespace도 생성해준다.

aws eks create-fargate-profile --cluster-name <CLUSTER-NAME> --fargate-profile-name argocd
\ --pod-execution-role-arn <CLUSTER-FARGATE-ROLE>
\ --subnets <SUBNET1>, <SUBNET2>
\ --selectors argocd

이후, Subnet에 태깅을 해주는 선작업이 필요하다. 해당 작업을 해주지 않으면, argo를 위한 ingress 배포 시 생성 오류가 발생한다.

Failed build model due to couldn't auto-discover subnets: unable to resolve at least one subnet (0 match VPC and tags)

Cluster에서 사용하는 Subnet에 tag가 필요하므로 이를 위해 각 Subnet에 맞게 태그를 지정한다.

KEY:VALUE
Private Subnet => kubernetes.io/role/internal-elb: 1 
Public Subnet =>  kubernetes.io/role/elb: 1 

1. ArgoCD 자원 배포

ArgoCD를 띄우기 위한 기초적인 자원들을 배포한다. 방식에는 2가지로 Helm, Kubectl을 이용하여 배포를 진행한다.

  1. Helm을 이용한 배포

    # Argo를 Repo에 추가
    helm repo add argo <https://argoproj.github.io/argo-helm>
     
    # 기생성한 namespace에 argocd 배포
    helm install argocd argo/argo-cd --namespace argocd
  2. kubectl을 이용한 배포

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

이후 ArgoCD를 외부에서 접근하기 위한 Ingress를 생성한다.

# ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    alb.ingress.kubernetes.io/actions.ssl-redirect: '{"Type": "redirect", "RedirectConfig":
      { "Protocol": "HTTPS", "Port": "443", "StatusCode": "HTTP_301"}}'
    alb.ingress.kubernetes.io/backend-protocol: HTTPS
    alb.ingress.kubernetes.io/certificate-arn: <AWS-CERTIFICATE-ACM-ARN>
    alb.ingress.kubernetes.io/healthcheck-path: /login
    alb.ingress.kubernetes.io/listen-ports: '[{"HTTPS":443}, {"HTTP":80}]'
    alb.ingress.kubernetes.io/scheme: internet-facing
    alb.ingress.kubernetes.io/target-type: ip
  generation: 1
  labels:
    app: {ARGOCD_APP_LABEL}
    tier: backend
  name: {ARGOCD_INGRESS_NAME}
  namespace: argocd
spec:
  ingressClassName: alb
  rules:
  - http:
      paths:
      - backend:
          service:
            name: argocd-server
            port:
              number: 443
        path: /*
        pathType: ImplementationSpecific
kubectl apply -f ingress.yaml -n argocd

2. ArgoCD 접속 확인

생성한 Ingress의 정보를 확인한다.

kubectl get ingress -n argocd
===================Result===================
NAME  CLASS   HOSTS   ADDRESS   PORTS   AGE

확인한 정보 중 Address를 이용하여 ArgoCD에 접속한다.

# Project 중 생성된 URL의 정보는 다음과 같다.
{LOAD_BALANCER_DNS}

접속된 ArgoCD는 다음과 같이 Login 페이지가 뜬다.

ArgoCD 접속 화면

접속을 위한 Admin 계정은 argocd의 secret을 통해 확인할 수 있다. 단, linux 환경에서는 아래와 같은 명령어로 한번에 확인할 수 있지만 window 환경에서는 ‘|’ 뒤의 base64 명령어가 먹히지 않아 일을 2번 해야한다.. 혹시 모르니 사이트를 남겨 놓는다.

# linux
kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d; echo
 
# windows
kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}"
 > <https://www.base64decode.org/> 접속하여 확인 필요

현재 발생하고 있는 문제점은… HTTP로 통신하고 있을 때는 ArgoCD에서 로그인이 Redirect가 된다는 것이다. 위의 Ingress 설정에서 뭔가 문제가 있는 것처럼 보이는데.. HTTPS로 통신을 했을 때는 정상 로그인이 되는데… 이유가 무엇인지는 확인이 필요해 보인다.