yeonghoon.kim

  • 게시판
  • 갤러리

CoreDNS로 GitLab Registry 내부 주소 고정

김영훈 2026.06.17 12:21 조회 수 : 19

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

  • 비추천 0
이 게시물을
목록

댓글 0

번호 제목 글쓴이 날짜 조회 수
339 yeonghoon.kim php 업그레이드 new 김영훈 2026.07.09 0
338 GitLab Registry PAT 만료로 이미지 Pull 실패 김영훈 2026.07.08 14
337 Stateful과 Stateless 구분해보기 김영훈 2026.07.02 23
336 Git revert는 기록을 지우는 게 아니라 되돌리는 기록을 남기는 것 김영훈 2026.06.29 19
335 OutOfSync와 Degraded 구분하기 김영훈 2026.06.28 25
334 control-plane 장애 시나리오 관찰 김영훈 2026.06.27 12
333 worker 재부팅 전 drain 절차 정리 김영훈 2026.06.26 20
332 ImagePullBackOff와 registry pull secret 누락 김영훈 2026.06.22 17
331 ArgoCD 복구 중 GitLab 접근 문제 정리 김영훈 2026.06.22 26
330 관측 스택과 앱 배포 저장소 구조 정리 김영훈 2026.06.19 23
329 SOPS Secret 복구와 ArgoCD root Application 적용 김영훈 2026.06.18 28
328 복구 런북 초반 누락 사항 정리 김영훈 2026.06.17 15
» CoreDNS로 GitLab Registry 내부 주소 고정 김영훈 2026.06.17 19
326 ArgoCD와 GitOps 구조 준비 김영훈 2026.06.16 16
325 SOPS age로 Kubernetes Secret 암복호화 김영훈 2026.06.15 23
324 yeonghoon.kim 배포 파일을 Helm Chart로 전환 [1] 김영훈 2026.06.12 18
323 Docker Compose 서비스를 Kubernetes로 이전(깃랩 도커 저장소 필요) [2] 김영훈 2026.06.10 20
322 Kubernetes 기본 클러스터, ingress-nginx 설치 김영훈 2026.06.09 15
321 DGX Kubernetes 구성 계획 김영훈 2026.06.08 25
320 2026년 일본 여행(21일) 요약 김영훈 2026.06.02 17
쓰기 태그
 첫 페이지 1 2 3 4 5 6 7 8 9 10 끝 페이지