본문 바로가기

🌅 리눅스/🌅 curl

curl 을 활용한 REST API 조회 (DNS 서비스 주소 활용)

Kubernetes DNS

K8s에서는 클러스터 안에서만 사용하는 DNS를 설정할 수 있다.

파드끼리 IP통신도 가능하고, IP가 아닌 도메인을 사용할 수 있다.

DNS로 서비스를 찾는 방법은 IP를 기반으로 찾는 방법보다 유연하고, 안장적이다. 예를들어 pod가 재시작 되거나, 종료 후 다시 시작할때 pod는 내부적으로 새로운 ip를 생성한다. 그러므로 만약 백엔드에서 특정 pod를 호출하여 어떤 결과물을 받아 와야할 경우 pod의 IP를 활용하여 접근하는 방법보다, DNS를 활용하여 접근하는 방법이 안정적이며 효율적이다.

# 일단 환경은 pod에서 다른 pod로 curl 명령어를 통해 REST API를 호출하는 과정이다.

1. pod ip를 활용하여 REST API 조회 하는 방법은 아래의 링크를 참고 한다.

2022.10.14 - [⌛ AWS 인프라 구성하기 (MiniProject)/✅ 테스트 (Test)] - (EKS) 동일 Namespace내의 pod간 통신 테스트

 

(EKS) 동일 Namespace내의 pod간 통신 테스트

pod간 통신 확인 및 curl 을 통해 pod간 API 호출이 가능한지 확인한다. 기본 명령어는 아래와 같다. kubectl exec -it [pod_name] -n [namespace_name] -- bash 1. pod 리스트 조회 kubectl get pod kubectl get..

may9noy.tistory.com

2. 문제점 : 1번의 pod ip를 활용하면 pod 재시작 시 ip가 변하는 문제 발생

해결방안

- 해결방안은 여러가지가 있을거 같다. 여기서는 service name과 namespaces name을 활용하여 내부로 REST API Call 을 통해 API를 조회하는 방법에 대해서 알아본다.

- 일단 접근 하려는 pod의 service name과 namespace의 name을 확인할 필요가 있다.

- servicename 확인

kubectl get svc -n {namespace_name}

# namespace가 존재 하지 않으면 -n 옵션 제거
kubectl get svc

- namespace 확인

kubectl get ns

kubectl get namespace

3. 확인한 정보를 활용하여 내부 DNS 주소 생성하기

- DNS 주소 생성 Rule은 아래와 같다.

# 특정 서비스에 접근하는 도메인

Domain: 서비스이름.네임스페이스이름.svc.cluster.local 으로 구성한다.

# 특정 pod에 접근하는 도메인 (pod 재 시작시 ip가 변동 되므로 비 추천)

Domain: 파드IP주소.네임스페이스이름.pod.cluster.local

4. 특정 서비스에 접근하는 도메인을 생성 후 REST API를 호출

- 주소 생성

"{service_name}.{namespace_name}.svc.cluster.local:{service_port}/{API 주소}"

"api-service.default.svc.cluster.local:80/member"

- REST API 조회

curl -X GET "{service_name}.{namespace_name}.svc.cluster.local:{service_port}/{API 주소}"

curl -X GET "api-service.default.svc.cluster.local:80/member"

5. 결과

- REST API를 활용 파라미터를 활용한 다양한 조회 및 입력 테스트를 추후에 작성해보자.