본문 바로가기
k8s

[TIL] pod에서 서비스 접속하기

by marble25 2022. 7. 10.

쿠버네티스를 사용하다 보면 컨테이너 내에서 다른 서비스를 접속하는 일이 있다.

이때, ip 주소를 직접 입력하기보다는 dns 서버를 이용해서 접근하는 것이 훨씬 유용하다.

쿠버네티스에는 내부적으로 CoreDNS라는 dns 서버를 사용한다.

CoreDNS는 기본적으로 kube-system 네임스페이스에 속해있고, configmap은 다음과 같이 볼 수 있다.

kubectl describe cm -n kube-system coredns

Name:         coredns
Namespace:    kube-system
Labels:       <none>
Annotations:  <none>

Data
====
Corefile:
----
.:53 {
    errors
    health {
       lameduck 5s
    }
    ready
    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
    loop
    reload
    loadbalance
}


BinaryData
====

Events:  <none>

서비스

서비스의 경우 my-svc.my-namespace.svc.cluster-domain.example의 형태로 자동으로 dns가 매핑된다.
만약 local cluster에서 nginx 서비스를 default 네임스페이스에서 사용한다면 nginx.default.svc.cluster.local이 될 것이다.
나의 경우, 서비스의 namespace를 변경할 때 실수로 dns를 사용하는 다른 파드에서 namespace를 변경하지 않아서 오류를 찾는데 애를 먹었던 경험이 있는데, 항상 namespace에 대해서도 생각해주어야 한다.

파드

파드의 경우 pod-ip-address.my-namespace.pod.cluster-domain.example의 형태로 자동으로 dns가 매핑된다.
서비스가 할당된 파드는 pod-ip-address.service-name.my-namespace.svc.cluster-domain.example의 형태로 dns가 매핑된다.
이런 방식으로 사용할 수는 있지만 pod-ip는 변경될 가능성이 많기 때문에 추천하지 않는다.
차라리 외부에 노출될 수 있는 파드의 경우 서비스와 연결해서 서비스를 호출하는 형태로 사용하는 편이 낫다.

nslookup

또 다른 방법은 CoreDNS와 nslookup을 이용해서 dns 주소를 알아낼 수 있다.
예를 들어, 다음과 같은 서비스가 있다고 하자.

# kubectl get service git-server
NAME         TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)    AGE
git-server   ClusterIP   10.96.161.87   <none>        9009/TCP   33h

위의 서비스를 사용할 Pod 내에서 nslookup을 실행해보자.

# nslookup 10.96.161.87
Server:        10.96.0.10
Address:    10.96.0.10:53

87.161.96.10.in-addr.arpa    name = git-server.default.svc.cluster.local

위의 클러스터 ip를 이용, 서비스의 dns를 알아낼 수 있다.

'k8s' 카테고리의 다른 글

[TIL] regcred 알아보기  (0) 2023.04.24
K8S 컴포넌트 정리  (0) 2023.03.31
Kubernetes에서 NAS 사용하기  (0) 2023.03.26
Kubernetes 스토리지 구조  (0) 2023.03.26
Minikube, Kubeadm, Kind, K3S  (0) 2022.05.08