kubernetes - 외부 클라이언트에 서비스 노출

2021. 11. 1. 00:27kubernetes | docker

프론트엔드 웹 서버와 같은 특정 서비스를 외부(클라이언트)에 노출시켜 외부에서 접근(로그인, 검색 등)하여 서비스를 이용하려고 할것이다...(당연한것이지만)

 

이런 경우 외부에서 서비스를 엑세스할 수 있는 몇가지 방법들이 있는데 배운것을 정리해보고자 한다.

 

1. 노드포트로 서비스 유형 설정

 

쿠버네티스 서비스를 생성하고 서비스 유형을(type : NodePort)로 설정하는 것이다.

노드포트 서비스를 통해 쿠버네티스는 모든 노드에 특정 포트를 할당하고 서비스를 구성하는 파드로 들어오는 연결을 전달한다.

 

 

 

 

 

 

pod는 생서되기도 하고 줄어들 수 있지만, 항상 서비스와 서비스의 IP주소로 엑세스 할 수 있어야 한다.

 

 

파드입장에서  서비스의 IP주소를 어떻게 알 수 있을까?

 

서비스가 생성되면 쿠버네티스는 환경변수에 생성된 서비스의 IP주소를 환경변수에 추가시킨다. 

그리고

파드가 생성되면 쿠버네티스는 pod생성 시점에 존재하는 모든 서비스의 IP를 환경변수세트를 초기화한다.

 

 

즉, 정리하면 pod를 만들고 서비스를 만들면 서비스에 대한 환경변수를 설정하는 것은 불가능하다.

그럼으로 서비스를 생성하고 pod를 등록해야한다.

 

직접 실습한 부분을 캡쳐하여 보면

서비스가 두개가 보이지만 하나는 쿠버네티스 자체 서비스, 하나는 내가 직접 만든 서비스다.

 

여기서 kubia 서비스의 IP가 10.87.249.53인 것을 확인 후

 

pod에 직접 접속하여 환경변수를 확인해 보자.

 

파드의 환경변수를 확인해보면

직접 만든 서비스의 IP주소를 확인할 수 있을 것이다.

 

물론 이 예제에서는 서비스를 먼저 생성 뒤에 pod를 생성하였다.

그렇기 때문에 pod의 환경변수에 서비스의 IP정보가 입력 된것을 확인 할 수 있다.

 

 

만약, 웹서비스에서 프론트엔드와 백엔드 서비스를 쿠버네티스 서비스로 묶으려면

백엔드 서비스의 IP를 프론트엔드 pod 환경변수에 등록하면 된다.

 

 

 

 

2. DNS를 통한 서비스 검색

 

쿠버네티스는 kube-system 네임스페이스의 파드중에 kube-dns라는 자체 DNS서버를 운영하고 있다. 그렇기 때문에 파드에서 실행중인 컨테이너에서 실행되는 서비스들은 내부 DNS에서 IP정보를 가져오고 엑세스가 가능해진다.

 

이렇게 접근하는 경우 FQDN으로 엑세스가 진행된다.