NGINX 인그레스(Ingress) 컨트롤러로 Minikube에서 인그레스 설정하기

인그레스는 클러스터의 서비스에 대한 외부 액세스를 허용하는 규칙을 정의하는 API 객체이다. 인그레스 컨트롤러는 인그레스에 설정된 규칙을 이행한다.

이 페이지에서는 HTTP URI에 따라 요청을 Service 'web' 또는 'web2' 로 라우팅하는 간단한 인그레스를 설정하는 방법을 보여준다.

시작하기 전에

이 튜토리얼에서는 로컬 Kubernetes 클러스터를 실행하기 위해 minikube를 사용한다고 가정한다. minikube 설치 방법은 도구 설치 문서를 참고하자.

쿠버네티스 클러스터가 필요하고, kubectl 커맨드-라인 툴이 클러스터와 통신할 수 있도록 설정되어 있어야 한다. 이 튜토리얼은 컨트롤 플레인 호스트가 아닌 노드가 적어도 2개 포함된 클러스터에서 실행하는 것을 추천한다. 만약, 아직 클러스터를 가지고 있지 않다면, minikube를 사용해서 생성하거나 다음 쿠버네티스 플레이그라운드 중 하나를 사용할 수 있다.

쿠버네티스 서버의 버전은 다음과 같거나 더 높아야 함. 버전: 1.19.

버전 확인을 위해서, 다음 커맨드를 실행 kubectl version.

만약 이보다 더 이전 버전의 쿠버네티스를 사용하고 있다면, 해당 쿠버네티스 버전의 문서를 참고한다.

Minikube 클러스터 생성하기

아직 클러스터를 로컬에 생성하지 않았다면, minikube start를 실행하여 클러스터를 생성한다.

인그레스 컨트롤러 활성화

  1. NGINX 인그레스 컨트롤러를 활성화하기 위해 다음 명령을 실행한다.

    minikube addons enable ingress 
  2. NGINX 인그레스 컨트롤러가 실행 중인지 확인한다.

     kubectl get pods -n ingress-nginx 

    결과는 다음과 같다.

     NAME READY STATUS RESTARTS AGE ingress-nginx-admission-create-g9g49 0/1 Completed 0 11m ingress-nginx-admission-patch-rqp78 0/1 Completed 1 11m ingress-nginx-controller-59b45fb494-26npt 1/1 Running 0 11m 

hello, world 앱 배포하기

  1. 다음 명령을 사용하여 디플로이먼트(Deployment)를 생성한다.

    kubectl create deployment web --image=gcr.io/google-samples/hello-app:1.0 

    결과는 다음과 같다.

    deployment.apps/web created 

    디플로이먼트가 준비(Ready) 상태인지 확인한다.

    kubectl get deployment web 

    결과는 다음과 같다.

    NAME READY UP-TO-DATE AVAILABLE AGE web 1/1 1 1 53s 
  2. 디플로이먼트를 노출시킨다.

    kubectl expose deployment web --type=NodePort --port=8080 

    결과는 다음과 같다.

    service/web exposed 
  3. 서비스(Service)가 생성되고 노드 포트에서 사용할 수 있는지 확인한다.

    kubectl get service web 

    결과는 다음과 같다.

    NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE web NodePort 10.104.133.249 <none> 8080:31637/TCP 12m 
  4. minikube service 를 사용하여 노드포트(NodePort)를 통해 서비스에 접속한다. 사용 중인 플랫폼에 해당하는 지침을 따라 진행한다.

    minikube service web --url 

    결과는 다음과 같다.

    http://172.17.0.15:31637 

    이전 단계의 출력에서 얻은 URL을 호출한다.

    curl http://172.17.0.15:31637 

    # 별도의 터미널에서 명령어를 실행한다. minikube service web --url 

    결과는 다음과 같다.

    http://127.0.0.1:62445 ! Because you are using a Docker driver on darwin, the terminal needs to be open to run it. 

    다른 터미널에서, 이전 단계 출력에서 얻은 URL을 호출한다.

    curl http://127.0.0.1:62445 

    결과는 다음과 같다.

    Hello, world! Version: 1.0.0 Hostname: web-55b8c6998d-8k564 

    이제 Minikube IP 주소와 노드포트를 통해 샘플 앱에 액세스할 수 있다. 다음 단계에서는 인그레스 리소스를 사용하여 앱에 액세스할 수 있다.

인그레스 생성하기

다음 매니페스트는 hello-world.example를 통해 서비스로 트래픽을 보내는 인그레스를 정의한다.

  1. 다음 파일을 통해 example-ingress.yaml을 만든다.

    apiVersion: networking.k8s.io/v1 kind: Ingress metadata:  name: example-ingress spec:  ingressClassName: nginx  rules:  - host: hello-world.info  http:  paths:  - path: /  pathType: Prefix  backend:  service:  name: web  port:  number: 8080
  2. 다음 명령어를 실행하여 인그레스 오브젝트를 생성한다.

    kubectl apply -f https://k8s.io/examples/service/networking/example-ingress.yaml 

    결과는 다음과 같다.

    ingress.networking.k8s.io/example-ingress created 
  3. IP 주소가 설정되었는지 확인한다.

    kubectl get ingress 

    다음 예시와 같이, ADDRESS 열에서 IPv4 주소를 확인할 수 있다.

    NAME CLASS HOSTS ADDRESS PORTS AGE example-ingress <none> hello-world.example 172.17.0.15 80 38s 
  4. Ingress 컨트롤러가 트래픽을 제대로 라우팅하는지 확인한다. 사용 중인 플랫폼에 맞는 지침을 따른다.

curl --resolve "hello-world.example:80:$( minikube ip )" -i http://hello-world.example 

minikube tunnel 

결과는 다음과 같다.

Tunnel successfully started NOTE: Please do not close this terminal as this process must stay alive for the tunnel to be accessible ... The service/ingress example-ingress requires privileged ports to be exposed: [80 443] sudo permission will be asked for it. Starting tunnel for service example-ingress. 

새 터미널을 열고 다음 명령어를 실행한다.

curl --resolve "hello-world.example:80:127.0.0.1" -i http://hello-world.example 

결과는 다음과 같다.

Hello, world! Version: 1.0.0 Hostname: web-55b8c6998d-8k564 
  1. 원한다면 브라우저에서 hello-world.example 에 접속할 수도 있다.

    호스트 컴퓨터의 /etc/hosts 파일 맨 아래에 다음 행을 추가한다 (관리자 권한 필요).

    minikube 에서 알려준 external IP 주소를 확인한다.

     minikube ip 

     172.17.0.15 hello-world.example 

    127.0.0.1 hello-world.example 

    이렇게 하면, 웹 브라우저가 hello-world.example URL에 대한 요청을 Minikube로 보낸다.

두 번째 디플로이먼트 생성하기

  1. 다음 명령을 사용하여 두 번째 디플로이먼트를 생성한다.

    kubectl create deployment web2 --image=gcr.io/google-samples/hello-app:2.0 

    결과는 다음과 같다.

    deployment.apps/web2 created 

    디플로이먼트가 준비(Ready) 상태인지 확인한다.

    kubectl get deployment web2 

    결과는 다음과 같다.

    NAME READY UP-TO-DATE AVAILABLE AGE web2 1/1 1 1 53s 
  2. 두 번째 디플로이먼트를 노출시킨다.

    kubectl expose deployment web2 --port=8080 --type=NodePort 

    결과는 다음과 같다.

    service/web2 exposed 

기존 인그레스 수정하기

  1. 기존 example-ingress.yaml 매니페스트를 편집하고, 하단에 다음 줄을 추가한다.

    - path: /v2  pathType: Prefix  backend:  service:  name: web2  port:  number: 8080 
  2. 변경 사항을 적용한다.

    kubectl apply -f example-ingress.yaml 

    결과는 다음과 같다.

    ingress.networking/example-ingress configured 

인그레스 테스트하기

  1. Hello World 앱의 첫 번째 버전에 액세스한다.

    curl --resolve "hello-world.example:80:$( minikube ip )" -i http://hello-world.example 

    minikube tunnel 

    결과는 다음과 같다.

    Tunnel successfully started NOTE: Please do not close this terminal as this process must stay alive for the tunnel to be accessible ... The service/ingress example-ingress requires privileged ports to be exposed: [80 443] sudo permission will be asked for it. Starting tunnel for service example-ingress. 

    새로운 터미널을 열고, 아래 명령을 입력한다.

    curl --resolve "hello-world.example:80:127.0.0.1" -i http://hello-world.example 

    결과는 다음과 같다.

    Hello, world! Version: 1.0.0 Hostname: web-55b8c6998d-8k564 
  2. Hello World 앱의 두 번째 버전에 액세스한다.

    curl --resolve "hello-world.example:80:$( minikube ip )" -i http://hello-world.example/v2 

    minikube tunnel 

    결과는 다음과 같다.

    Tunnel successfully started NOTE: Please do not close this terminal as this process must stay alive for the tunnel to be accessible ... The service/ingress example-ingress requires privileged ports to be exposed: [80 443] sudo permission will be asked for it. Starting tunnel for service example-ingress. 

    새로운 터미널을 열고, 아래 명령을 입력한다.

    curl --resolve "hello-world.example:80:127.0.0.1" -i http://hello-world.example/v2 

    결과는 다음과 같다.

    Hello, world! Version: 2.0.0 Hostname: web2-75cd47646f-t8cjk 

다음 내용

최종 수정 October 15, 2025 at 10:26 PM PST: Add Korean translation for ingress-minikube.md (4deb780739)