본문으로 바로가기 본문 바로가기
WIKI 기술 지식 베이스

클러스터에서 NodeLocal DNSCache 사용하기

원문 보기 위키 갱신

NodeLocal DNSCache를 쓰면 파드의 DNS 질의가 각 노드의 로컬 캐시에서 처리되어 조회 지연이 줄어들어요. 이 문서는 Calico와 함께 NodeLocal DNSCache를 설치하고, DNS 트래픽이 로컬 캐시에 닿도록 네트워크 정책을 구성하는 방법을 안내합니다. eBPF 데이터 플레인 환경의 추가 구성도 함께 소개해요.

출처: 문서

본문

큰 그림

DNS 조회 지연을 개선하기 위해 NodeLocal DNSCache를 설정합니다.

시작하기 전에

필수

다음 절차를 따라 NodeLocal DNSCache 연결을 활성화하세요.

지원되지 않음

  • OpenShift

NodeLocal DNSCache는 OpenShift를 지원하지 않아요. OpenShift는 CoreDNS 파드를 DaemonSet으로 배포하는 자체 DNS 캐싱 메커니즘을 갖고 있습니다. 자세한 내용은 OpenShift DNS 설정을 참고하세요.

NodeLocal DNSCache의 트래픽을 허용하는 정책 만들기

다음은 kube-dns의 53번 포트로 들어오는 모든 TCP 트래픽(node-local-dns 파드에서 오는 인바운드 트래픽 포함)을 허용하는 샘플 네트워크 정책이에요.

apiVersion: projectcalico.org/v3
kind: NetworkPolicy
metadata:
  name: default.local-dns-to-core-dns
  namespace: kube-system
spec:
  tier: default
  selector: k8s-app == "kube-dns"
  ingress:
    - action: Allow
      protocol: TCP
      destination:
        selector: k8s-app == "kube-dns"
        ports:
          - '53'
  types:
    - Ingress

이 정책이 허용하는 소스를 세분화하려면 NodeLocal DNSCache 파드가 호스트 네트워크를 사용한다는 점을 고려해 호스트 주소들에서 오는 트래픽을 허용하도록 하세요. 캡슐화를 사용한다면 터널 IP에서 오는 연결도 허용해야 해요.

Tigera Operator는 Tigera 컴포넌트가 NodeLocal DNSCache를 감지하면 연결할 수 있도록 정책을 만들어요. Felix는 DNS 로그 생성과 DNS 정책 적용 시 NodeLocal DNSCache를 반영합니다.

eBPF 데이터 플레인을 사용하는 Calico에서 NodeLocal DNSCache 활성화하기

Calico 설치가 eBPF 데이터 플레인을 사용한다면 kube-dns 서비스에 어노테이션을 달아야 해요. 이걸 빠뜨리면 kube-proxy 대체 구현이 특정 서비스 IP로 가는 트래픽을 잘못 해석합니다.

다음 명령을 실행해 kube-dns 서비스에 어노테이션을 다세요:

kubectl annotate service kube-dns -n kube-system projectcalico.org/natExcludeService=true

추가 리소스

더 알아보기 (Learn more)

NodeLocal DNSCache 파드는 호스트 네트워크를 쓰므로 정책에서 호스트 주소를 허용해야 해요. eBPF 데이터 플레인이라면 natExcludeService 어노테이션이 필수라는 점도 기억하세요.