ArgoCD를 설치한 뒤 GitLab 저장소를 읽게 하려면 먼저 DNS 경로를 정리해야 했음.
작업 PC나 DGX 호스트에서 /etc/hosts를 잡아도, Kubernetes Pod 안에서는 그대로 먹히지 않음.
Pod는 보통 클러스터 안의 CoreDNS를 통해 이름을 해석함.
즉, ArgoCD repo-server Pod가 gitlab.yeonghoon.kim을 찾을 때는 DGX 호스트의 /etc/hosts가 아니라 Kubernetes CoreDNS를 봄.
GitLab과 Registry는 Kubernetes 안에 있는 서비스가 아니라 DGX 호스트 위 Docker 컨테이너로 동작 중.
DGX host spark-e51d
IP: 192.168.200.100
Docker container
- GitLab
- Registry
Kubernetes cluster
- ArgoCD repo-server
- app Pod
- CoreDNS
그래서 Kubernetes 안에서는 GitLab/Registry 도메인을 외부 DNS로 보내지 않고 내부 IP로 고정해서 보게 만듦.
gitlab.yeonghoon.kim
registry.yeonghoon.kim
-> 192.168.200.100
먼저 현재 CoreDNS 설정 확인.
# 현재 CoreDNS ConfigMap에 GitLab/Registry 내부 hosts override가 있는지 확인한다.
kubectl -n kube-system get configmap coredns \
-o go-template='{{.data.Corefile}}{{"\n"}}' | grep -E 'gitlab\.yeonghoon\.kim|registry\.yeonghoon\.kim|192\.168\.200\.100' || true
CoreDNS는 클러스터 전체 DNS에 영향을 주므로 수정 전 백업.
# 현재 CoreDNS ConfigMap을 DGX host 사용자 홈에 백업한다.
kubectl -n kube-system get configmap coredns -o yaml \
> /home/ioniere/coredns.before-dgx-override.yaml
chmod 600 /home/ioniere/coredns.before-dgx-override.yaml
CoreDNS override 적용.
# 클러스터 내부에서 GitLab/Registry 도메인이 DGX host IP로 해석되도록 CoreDNS override를 적용한다.
set -e
cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: ConfigMap
metadata:
name: coredns
namespace: kube-system
data:
Corefile: |
.:53 {
errors
health {
lameduck 5s
}
ready
hosts {
192.168.200.100 gitlab.yeonghoon.kim registry.yeonghoon.kim
fallthrough
}
kubernetes cluster.local in-addr.arpa ip6.arpa {
pods insecure
fallthrough in-addr.arpa ip6.arpa
ttl 30
}
prometheus :9153
forward . /etc/resolv.conf {
max_concurrent 1000
}
cache 30 {
disable success cluster.local
disable denial cluster.local
}
loop
reload
loadbalance
}
EOF
hosts 블록은 /etc/hosts와 비슷한 역할.
다만 호스트 OS의 /etc/hosts가 아니라 Kubernetes Pod DNS 기준으로 적용되는 설정.
fallthrough는 여기에 없는 이름은 원래 CoreDNS 흐름대로 넘기라는 뜻.
CoreDNS와 ArgoCD repo-server 재시작.
# CoreDNS와 ArgoCD repo-server를 재시작하고 rollout 완료를 기다린다.
kubectl -n kube-system rollout restart deployment/coredns
kubectl -n kube-system rollout status deployment/coredns --timeout=120s
kubectl -n argocd rollout restart deployment/argocd-repo-server
kubectl -n argocd rollout status deployment/argocd-repo-server --timeout=180s
Pod 안에서 DNS 확인.
# repo-server Pod 안에서 GitLab 도메인이 DGX host IP로 해석되는지 확인한다.
kubectl -n argocd exec deployment/argocd-repo-server -- getent hosts gitlab.yeonghoon.kim
# repo-server Pod 안에서 Registry 도메인이 DGX host IP로 해석되는지 확인한다.
kubectl -n argocd exec deployment/argocd-repo-server -- getent hosts registry.yeonghoon.kim
정상 기준.
192.168.200.100 gitlab.yeonghoon.kim
192.168.200.100 registry.yeonghoon.kim
DNS가 맞아도 SSH host key를 신뢰하지 못하면 ArgoCD가 GitLab repo를 읽지 못함.
그래서 GitLab SSH 공개 host key를 ArgoCD known_hosts에 등록.
# 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 -
kubectl -n argocd rollout restart deployment/argocd-repo-server
kubectl -n argocd rollout status deployment/argocd-repo-server --timeout=180s
여기서 등록하는 건 SSH private key가 아님.
접속 대상 서버의 공개 host key라서 Secret이 아니라 ConfigMap으로 관리함.
정리하면 이 작업은 ArgoCD와 Pod가 GitLab/Registry를 외부 공개 DNS가 아니라 내부 DGX 호스트 IP로 찾게 만드는 작업.
호스트 /etc/hosts로는 Pod 내부 DNS를 해결할 수 없어서 CoreDNS override를 사용함.
댓글 0
| 번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
|---|---|---|---|---|
| 19 | DGX Kubernetes 구성 계획 | 김영훈 | 2026.06.08 | 25 |
| 18 | Kubernetes 기본 클러스터, ingress-nginx 설치 | 김영훈 | 2026.06.09 | 15 |
| 17 | Docker Compose 서비스를 Kubernetes로 이전(깃랩 도커 저장소 필요) [2] | 김영훈 | 2026.06.10 | 20 |
| 16 | yeonghoon.kim 배포 파일을 Helm Chart로 전환 [1] | 김영훈 | 2026.06.12 | 18 |
| 15 | SOPS age로 Kubernetes Secret 암복호화 | 김영훈 | 2026.06.15 | 23 |
| 14 | ArgoCD와 GitOps 구조 준비 | 김영훈 | 2026.06.16 | 16 |
| » | CoreDNS로 GitLab Registry 내부 주소 고정 | 김영훈 | 2026.06.17 | 19 |
| 12 | 복구 런북 초반 누락 사항 정리 | 김영훈 | 2026.06.17 | 15 |
| 11 | SOPS Secret 복구와 ArgoCD root Application 적용 | 김영훈 | 2026.06.18 | 28 |
| 10 | 관측 스택과 앱 배포 저장소 구조 정리 | 김영훈 | 2026.06.19 | 23 |
| 9 | ArgoCD 복구 중 GitLab 접근 문제 정리 | 김영훈 | 2026.06.22 | 26 |
| 8 | ImagePullBackOff와 registry pull secret 누락 | 김영훈 | 2026.06.22 | 17 |
| 7 | worker 재부팅 전 drain 절차 정리 | 김영훈 | 2026.06.26 | 20 |
| 6 | control-plane 장애 시나리오 관찰 | 김영훈 | 2026.06.27 | 12 |
| 5 | OutOfSync와 Degraded 구분하기 | 김영훈 | 2026.06.28 | 25 |
| 4 | Git revert는 기록을 지우는 게 아니라 되돌리는 기록을 남기는 것 | 김영훈 | 2026.06.29 | 19 |
| 3 | Stateful과 Stateless 구분해보기 | 김영훈 | 2026.07.02 | 23 |
| 2 | GitLab Registry PAT 만료로 이미지 Pull 실패 | 김영훈 | 2026.07.08 | 14 |
| 1 | yeonghoon.kim php 업그레이드 | 김영훈 | 2026.07.09 | 0 |