웹사이트 검색

Kubernetes 클러스터에 Nginx를 배포하는 방법


지난 기사에서는 Kubernetes 클러스터를 설정하고 실행하는 방법에 대해 논의했습니다. 클러스터에 NGINX 서비스를 배포하는 방법에 대해 논의해 보겠습니다.

퍼블릭 클라우드 공급자가 호스팅하는 가상 머신에서 이 배포를 실행하겠습니다. 많은 공용 클라우드 서비스와 마찬가지로 많은 사람들이 일반적으로 가상 머신에 대한 공용 및 개인 IP 체계를 유지합니다.

테스트 환경

Master Node - Public IP: 104.197.170.99 and Private IP: 10.128.15.195
Worker Node 1 - Public IP: 34.67.149.37 and Private IP: 10.128.15.196
Worker Node 2 - Public IP: 35.232.161.178 and Private IP: 10.128.15.197

Kubernetes 클러스터에 NGINX 배포

이 배포는 마스터 노드에서 실행됩니다.

먼저 클러스터 상태를 확인해 보겠습니다. 모든 노드는 READY 상태여야 합니다.

kubectl get nodes

NGINX 이미지를 사용하여 NGINX 배포를 생성합니다.

kubectl create deployment nginx --image=nginx

이제 배포 상태를 볼 수 있습니다.

kubectl get deployments

배포에 대한 자세한 내용을 보려면 describe 명령을 실행하세요. 예를 들어 실행 중인 배포 복제본 수를 확인할 수 있습니다. 우리의 경우 1개의 복제본이 실행될 것으로 예상됩니다(예: 1/1 복제본).

kubectl describe deployment nginx

이제 Nginx 배포가 활성화되었습니다. NGINX 서비스를 인터넷에서 연결할 수 있는 공용 IP에 노출할 수 있습니다.

Nginx 서비스를 공용 네트워크에 노출하기

Kubernetes는 Kubernetes 서비스 유형이라는 기능을 기반으로 서비스를 노출할 때 다음과 같은 몇 가지 옵션을 제공합니다.

  1. ClusterIP – 이 서비스 유형은 일반적으로 내부 IP에 서비스를 노출하며 클러스터 내에서만 연결 가능하며 클러스터 노드 내에서만 연결할 수 있습니다.
  2. NodePort – 이는 클러스터 외부, 클러스터의 모든 노드에 있는 특정 포트(NodePort라고 함)에서 서비스에 액세스할 수 있도록 노출하는 가장 기본적인 옵션입니다. 이 옵션을 곧 설명하겠습니다.
  3. LoadBalancer – 이 옵션은 다양한 공급자가 제공하는 외부 로드 밸런싱 서비스를 활용하여 서비스에 대한 액세스를 허용합니다. 이는 서비스의 고가용성을 고려할 때 보다 안정적인 옵션이며 기본 액세스 이상의 기능을 갖추고 있습니다.
  4. ExternalName – 이 서비스는 클러스터 외부 서비스로 트래픽을 리디렉션합니다. 따라서 서비스는 클러스터 외부에서 호스팅될 수 있는 DNS 이름에 매핑됩니다. 이는 프록시를 사용하지 않는다는 점에 유의하는 것이 중요합니다.

기본 서비스 유형은 ClusterIP입니다.

우리 시나리오에서는 공개 IP 주소와 비공개 IP 주소가 모두 있고 지금은 외부 로드 밸런서가 필요하지 않기 때문에 NodePort 서비스 유형을 사용하려고 합니다. 이 서비스 유형을 사용하면 Kubernetes는 30000+ 범위의 포트에 이 서비스를 할당합니다.

kubectl create service nodeport nginx --tcp=80:80

get svc 명령을 실행하여 서비스 요약과 노출된 포트를 확인하세요.

kubectl get svc

이제 컬 명령을 사용하여 모든 노드에서 Nginx 페이지에 연결할 수 있는지 확인할 수 있습니다.

curl master-node:30386
curl node-1:30386
curl node-2:30386

보시다시피, “WELCOME TO NGINX!” 페이지에 접근할 수 있습니다.

임시 PUBLIC IP 주소에 도달

아시다시피 Kubernetes에서는 등록된 활성 공용 IP가 없거나 등록된 EXTERNAL-IP가 없다고 보고합니다.

kubectl get svc

IP 명령을 사용하여 인터페이스에 연결된 외부 IP가 없는 것이 실제로 사실인지 확인해 보겠습니다.

ip a

보시다시피 공용 IP가 없습니다.

앞서 언급했듯이 저는 현재 퍼블릭 클라우드 제공업체가 제공하는 가상 머신에서 이 배포를 실행하고 있습니다. 따라서 공용 IP가 할당된 특정 인터페이스는 없지만 VM 공급자는 임시 외부 IP 주소를 발급했습니다.

임시 외부 IP 주소는 가상 인스턴스가 중지될 때까지 VM에 연결된 상태로 유지되는 임시 IP 주소입니다. 가상 인스턴스가 다시 시작되면 새로운 외부 IP가 할당됩니다. 기본적으로 이는 서비스 제공업체가 유휴 공용 IP를 활용할 수 있는 간단한 방법입니다.

공개 IP가 고정되어 있지 않다는 사실 외에 여기서 문제는 임시 공개 IP가 단순히 비공개 IP의 확장(또는 프록시)이라는 것입니다. 포트 30386에서만 액세스할 수 있습니다. 이는 서비스가 URL , 즉 104.197.170.99:30386에서 액세스된다는 의미입니다. 브라우저에서 시작 페이지를 볼 수 있어야 합니다.

이를 통해 우리는 3노드 Kubernetes 클러스터에 NGINX를 성공적으로 배포했습니다.