[CKS] 멀티 테넌트의 DNS 구성
Kubernetes 클러스터에서 CoreDNS 구성을 통해 네임스페이스 간 DNS 쿼리를 제한하여 테넌트 격리를 강화하는 방법입니다.
개요
아래 강의를 듣고 정리했습니다.
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