쿠버네티스 CoreDNS 설정(Corefile) 및 업스트림 포워딩

💡 핵심 요약 (Executive Summary)

본 가이드는 CoreDNS 핵심 가이드 및 실전 아키텍처의 핵심 개념, 실전 구성 명령어 및 아키텍처 베스트 프랙티스를 다룹니다. 클라우드 네이티브 및 인프라 엔지니어링 실무에 즉시 활용 가능하도록 체계적으로 정리했습니다.

📑 Table of Contents
Docs
resolv.conf에 관하여
Reference & Guidelines (NOTE)

Host에서 systemd-resolved 사용시 CoreDNS 동작

HostNode:

  • systemd-resolved는 /etc/resolv.conf = 127.0.0.53루프백주소로 고정한다.
  • 실제 /etc/systemd/resolved.conf에서 정의된 리졸브는 /var/run/systemd/resolve/resolv.conf이다.

Kubelet:

  • default는 HostNode의 /etc/resolv.conf 를 마운트한다.
  • Kublet은 루프백주소 127.0.0.53에 접근할 수 없다.
Reference & Guidelines (NOTE)

Kubernetes:

k3s:

bash
k3s server --resolv-conf $value
curl -sfL https://get.k3s.io | sh -s - server --resolv-conf $value
Features
AAAA=IPv6 차단
Reference & Guidelines (NOTE)

Node Network 외부로 IPv6 아웃바운드가 차단될때 대처

bash
data:
  Corefile: |
    .:53 {
...
        template IN AAAA {
          rcode NOERROR
        }
...kubernetes
    }
test

– 변경 전

bash
k exec -it dnsutils -- nslookup -type=aaaa bitbucket.org
  >>>
  Server:         10.43.0.10
  Address:        10.43.0.10#53

  Non-authoritative answer:
  Name:   bitbucket.org
  Address: 2401:1d80:3224:2:0:bbc:1:df7c
  Name:   bitbucket.org
  Address: 2401:1d80:3224::bbc:1:df7c
  Name:   bitbucket.org
  Address: 2401:1d80:3224:1:0:bbc:1:df7c
  <<<

– 변경 후

bash
k exec -it dnsutils -- nslookup -type=aaaa bitbucket.org
  >>>
  Server:         10.43.0.10
  Address:        10.43.0.10#53

  *** Can't find bitbucket.org: No answer
  <<<
resolv.conf 외 네임서버 지정
bash
#before
data:
  Corefile: |
    .:53 {
...
        forward . /etc/resolv.conf
        }
    }
	  
#after
data:
  Corefile: |
    .:53 {
...
        forward . 8.8.8.8
        }
    }
특정 도메인 매칭시 DNS 지정
bash
Corefile: |
    .:53 {
    #...
    }
    # 추가: **.my.domain 도메인 우선 DNS 지정
    my.domain:53 {
        errors
        cache 30
        forward . $my_dns_ip
    }

Feature

도메인에 따른 dns분리 및 host Override
bash
apiVersion: v1
data:
  Corefile: |-
    fredric18.internal:53 {
        errors
        cache 30
        forward . 192.168.1.1
    }
    .:53 {
        hosts {
            192.168.118.13 rancher.mgnt.fredric18.uk
            fallthrough
        }
        errors
        health {
            lameduck 10s
        }
        ready
        kubernetes  cluster.local  cluster.local in-addr.arpa ip6.arpa {
            pods insecure
            fallthrough in-addr.arpa ip6.arpa
            ttl 30
        }
        prometheus  0.0.0.0:9153
        forward  . 8.8.8.8
        cache  30
        loop
        reload
        loadbalance
    }
kind: ConfigMap
metadata:
  annotations:
    meta.helm.sh/release-name: rke2-coredns
    meta.helm.sh/release-namespace: kube-system
  creationTimestamp: "2025-12-07T14:45:59Z"
  labels:
    app.kubernetes.io/instance: rke2-coredns
    app.kubernetes.io/managed-by: Helm
    app.kubernetes.io/name: rke2-coredns
    helm.sh/chart: rke2-coredns-1.43.302
    k8s-app: kube-dns
    kubernetes.io/cluster-service: "true"
    kubernetes.io/name: CoreDNS
  name: rke2-coredns-rke2-coredns
  namespace: kube-system
  resourceVersion: "140240348"
  uid: 0cd77e69-2946-4914-9379-e25798e59646

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *