[CKS] 멀티 테넌트의 DNS 구성

Kubernetes 클러스터에서 CoreDNS 구성을 통해 네임스페이스 간 DNS 쿼리를 제한하여 테넌트 격리를 강화하는 방법입니다.

[CKS] 멀티 테넌트의 DNS 구성
Photo by Possessed Photography / Unsplash

개요

아래 강의를 듣고 정리했습니다.

Kubernetes DNS

여러 테넌트(Namespace)가 동일한 클러스터를 공유하는 경우 테넌트간의 보안 및 격리를 고려해야합니다.

Kubernetes는 기본적으로 CoreDNS를 사용하는데 모든 서비스와 Pod는 FQDN을 통해 엑세스 가능합니다.

  • backend.namespace-a.svc.cluster.local → 다른 namespace에서 조회 가능
    • service → backend, namespace → namespace-a

테넌트 간의 강력한 격리를 위해선 DNS 확인을 제어하는 것이 중요합니다.

테넌트 격리를 위한 CoreDNS 구성

CoreDNS 구성을 수정하여 DNS 쿼리를 시작하는 Namespace로 제한 가능합니다.

CoreDNS ConfigMap 편집

kubectl edit configmap coredns -n kube-system
  • fallthrough in-namespace → Namespace Resolve 제한
    • 실제 네트워크 통신 자체를 막으려면 NetworkPolicy 설정도 권장됨
apiVersion: v1
kind: ConfigMap
metadata:
  name: coredns
  namespace: kube-system
data:
  Corefile: |
    .:53 {
        errors
        health {
            lameduck 5s
        }
        ready
        kubernetes cluster.local in-addr.arpa ip6.arpa {
            pods verified
            fallthrough in-namespace
        }
        prometheus :9153
        forward . /etc/resolv.conf
        cache 30
        loop
        reload
        loadbalance
    }

테스트 참고

kubectl run test-pod --rm -i --tty --image=busybox --restart=Never --namespace=namespace-a -- nslookup backend.namespace-b.svc.cluster.local