클러스터를 다시 만들고 ArgoCD를 복구하는 과정에서 GitLab repo 접근 문제가 나옴.
ArgoCD UI가 뜬다고 바로 GitOps가 되는 건 아니었음.
ArgoCD가 GitLab repo를 읽으려면 몇 가지가 같이 맞아야 함.
- ArgoCD가 설치되어 있어야 함
argocdnamespace의 Secret/ConfigMap이 복구되어야 함- Pod 안에서
gitlab.yeonghoon.kim이 내부 IP로 해석되어야 함 - GitLab SSH host key가 known_hosts에 등록되어야 함
- repo credential Secret이 있어야 함
먼저 ArgoCD 설치 중 CRD 오류가 있었음.
공식 install manifest 적용 중 applicationsets.argoproj.io CRD가 annotation 크기 제한으로 실패함.
오류는 대략 이런 쪽.
metadata.annotations: Too long
ArgoCD CRD가 커서 일반 apply 경로에서 annotation 제한에 걸린 것으로 봄.
해당 CRD는 server-side apply로 다시 적용.
# ArgoCD install manifest를 server-side apply 방식으로 적용한다.
kubectl apply --server-side --force-conflicts \
-n argocd \
-f https://raw.githubusercontent.com/argoproj/argo-cd/v3.4.3/manifests/install.yaml
ArgoCD 설치 후에는 Ingress와 UI를 먼저 확인함.
# ArgoCD Pod 상태를 확인한다.
kubectl -n argocd get pods -o wide
# ArgoCD Ingress 상태를 확인한다.
kubectl -n argocd get ingress argocd-server -o wide
# Ingress VIP로 ArgoCD UI 응답을 직접 확인한다.
curl -k -sS -o /dev/null -w "%{http_code}\n" \
--max-time 10 \
--resolve "argo.yeonghoon.kim:443:192.168.200.49" \
https://argo.yeonghoon.kim/
UI 응답이 살아도 GitLab repo 접근은 별도 문제.
cluster-apps root Application을 적용했을 때 처음에는 known_hosts 오류가 남.
knownhosts: key is unknown
이건 GitLab 비밀번호나 SSH key가 틀렸다는 뜻이라기보다, ArgoCD가 gitlab.yeonghoon.kim:2224의 SSH host key를 아직 신뢰하지 않는다는 뜻.
GitLab SSH host key 확인.
# GitLab SSH host key를 확인한다.
ssh-keyscan -p 2224 gitlab.yeonghoon.kim
ArgoCD known_hosts ConfigMap에 등록.
# GitLab SSH 공개 host key를 ArgoCD known_hosts ConfigMap에 등록한다.
ssh-keyscan -p 2224 gitlab.yeonghoon.kim 2>/dev/null | \
kubectl -n argocd create configmap argocd-ssh-known-hosts-cm \
--from-file=ssh_known_hosts=/dev/stdin \
--dry-run=client -o yaml | \
kubectl -n argocd apply -f -
repo-server 재시작.
# ArgoCD repo-server가 known_hosts 변경을 다시 읽도록 재시작한다.
kubectl -n argocd rollout restart deployment/argocd-repo-server
kubectl -n argocd rollout status deployment/argocd-repo-server --timeout=180s
그 다음 root Application 적용.
# cluster-apps root Application을 적용한다.
cd /home/ioniere/gitlab-project-clones/ioniere/cluster-apps
kubectl -n argocd apply -f bootstrap/root-application.yaml
상태 확인.
# cluster-apps Application 상태를 확인한다.
kubectl -n argocd get application cluster-apps \
-o jsonpath='sync={.status.sync.status}{"\n"}health={.status.health.status}{"\n"}message={.status.operationState.message}{"\n"}'
복구 중에는 GitLab 접근 문제를 한 번에 Secret 문제로 단정하면 안 됨.
나눠서 봐야 함.
DNS 문제
= Pod 안에서 gitlab.yeonghoon.kim이 잘못된 IP로 해석됨
known_hosts 문제
= GitLab SSH host key를 ArgoCD가 신뢰하지 않음
repo credential 문제
= ArgoCD가 GitLab repo에 들어갈 SSH key나 credential이 없음
ArgoCD 설치 문제
= CRD나 controller가 정상 설치되지 않음
CoreDNS override, known_hosts, repo credential, root Application 순서가 중요하다는 걸 다시 확인함.
ArgoCD UI가 뜬 것과 ArgoCD가 GitLab repo를 읽는 것은 별개로 봐야 함.