소개
이 랩에서는 Kubernetes 클러스터에서 실행 중인 서비스로 외부 트래픽을 라우팅하기 위해 Ingress 를 사용하는 방법을 배우게 됩니다.
Kubernetes Ingress 는 Kubernetes 클러스터에서 서비스에 대한 외부 액세스를 관리하기 위한 강력한 도구입니다. Ingress 는 레이어 7 로드 밸런서 (load balancer) 역할을 하며, 들어오는 URL 경로 또는 호스트 이름을 기반으로 트래픽을 다른 서비스로 라우팅할 수 있도록 합니다.
이 랩에서는 샘플 애플리케이션을 생성하고 Ingress 를 사용하여 외부 세계에 노출시킬 것입니다. Kubernetes Ingress 에 대한 인기 있고 널리 사용되는 솔루션인 nginx-ingress를 Ingress 컨트롤러 (controller) 로 사용할 것입니다.
Minikube 클러스터 시작
리소스를 생성하기 전에 실행 중인 Kubernetes 클러스터가 필요합니다. Minikube 는 로컬 머신에서 실행되는 가벼운 Kubernetes 환경입니다.
작업 디렉토리로 이동:
터미널을 열고 기본 프로젝트 폴더로 이동합니다.
cd /home/labex/projectMinikube 시작:
Kubernetes 클러스터를 초기화하기 위해 Minikube 를 시작합니다.
minikube start- 이 명령은 로컬 머신에 단일 노드 Kubernetes 클러스터를 설정합니다.
- Minikube 는 시스템 성능에 따라 시작하는 데 몇 분 정도 걸릴 수 있습니다.
Minikube 가 실행 중인지 확인:
Minikube 클러스터의 상태를 확인합니다.
minikube statuskubelet및apiserver와 같은 구성 요소가Running으로 나열되어 있는지 확인합니다.- 클러스터가 실행 중이지 않으면
minikube start를 다시 실행합니다.
Minikube 를 시작하는 데 문제가 발생하면 필요에 따라 minikube delete를 사용하여 환경을 재설정하십시오.
Nginx Ingress Controller 설치
먼저, 클러스터에 nginx-ingress 컨트롤러를 설치해야 합니다. Ingress 컨트롤러를 실행하는 데 사용될 Deployment 와 Service 를 생성하여 이를 수행할 수 있습니다.
Ingress 컨트롤러를 위한 네임스페이스 (namespace) 를 생성합니다.
kubectl create namespace ingress-nginx
kubectl을 사용하여 ingress-nginx 차트 (chart) 를 설치합니다.
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.7.0/deploy/static/provider/cloud/deploy.yaml
ingress-nginx 컨트롤러 파드 (pod) 가 실행 중인지 확인합니다.
kubectl get pods -n ingress-nginx
NAME READY STATUS RESTARTS AGE
ingress-nginx-admission-create-zjfqx 0/1 ContainerCreating 0 2s
ingress-nginx-admission-patch-8rvzw 0/1 ContainerCreating 0 2s
ingress-nginx-controller-6bdb654777-qz8fb 0/1 ContainerCreating 0 2s
샘플 애플리케이션 생성
다음으로, Ingress 를 사용하여 노출할 샘플 애플리케이션을 생성합니다.
샘플 애플리케이션을 위한 Deployment 를 생성합니다.
apiVersion: apps/v1
kind: Deployment
metadata:
name: sample-app
spec:
replicas: 3
selector:
matchLabels:
app: sample-app
template:
metadata:
labels:
app: sample-app
spec:
containers:
- name: sample-app
image: nginx
ports:
- containerPort: 80
sample-app.yaml이라는 YAML 파일입니다. 다음 명령을 사용하여 Deployment 를 클러스터에 적용합니다.
kubectl apply -f sample-app.yaml
샘플 애플리케이션을 위한 Service 를 생성합니다.
apiVersion: v1
kind: Service
metadata:
name: sample-app
spec:
selector:
app: sample-app
ports:
- name: http
port: 80
targetPort: 80
service-sample-app.yaml이라는 YAML 파일입니다. 다음 명령을 사용하여 Deployment 를 클러스터에 적용합니다.
kubectl apply -f service-sample-app.yaml
Ingress 리소스 생성
이제 Ingress 컨트롤러가 설정되었고 백엔드 서비스가 실행 중이므로 Ingress 리소스에 대한 규칙을 생성할 수 있습니다.
이 예제에서는 test.local 도메인에 대한 트래픽을 백엔드 서비스로 라우팅하는 간단한 규칙을 생성합니다.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: test-ingress
annotations:
kubernetes.io/ingress.class: nginx
spec:
rules:
- host: test.local
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: sample-app
port:
name: http
ingress.yaml이라는 YAML 파일입니다. Ingress 리소스를 클러스터에 적용합니다.
kubectl apply -f ingress.yaml
Ingress 리소스 테스트
마지막으로, Ingress 리소스가 올바르게 작동하는지 확인하기 위해 테스트할 수 있습니다.
먼저, 노드의 IP 주소를 확인합니다.
kubectl get node -o wide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
minikube Ready control-plane 93s v1.26.1 192.168.49.2 <none> Ubuntu 20.04.5 LTS 5.15.0-56-generic docker://20.10.23
이 명령은 Kubernetes 노드 주소를 가져오며, INTERNAL-IP로 레이블된 IP 주소를 확인합니다.
다음으로, /etc/hosts 파일에 test.local 도메인을 노드의 IP 주소에 매핑하는 항목을 추가합니다.
echo "<IP_ADDRESS> test.local" | sudo tee -a /etc/hosts
<IP_ADDRESS>를 노드 주소의 내부 IP 주소로 바꿉니다. 예를 들어:
echo "192.168.49.2 test.local" | sudo tee -a /etc/hosts
그런 다음, ingress-nginx에 대한 서비스 NodePort 를 가져옵니다.
kubectl get services -n ingress-nginx
이 명령은 ingress-nginx 네임스페이스의 서비스 목록을 표시합니다. nginx-ingress-controller 서비스를 찾고 해당 NodePort를 기록해 둡니다.
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
ingress-nginx-controller LoadBalancer 10.104.99.158 <pending> 80:32518/TCP,443:31620/TCP 2m45s
ingress-nginx-controller-admission ClusterIP 10.100.46.109 <none> 443/TCP 2m45s
마지막으로, curl을 사용하여 Ingress 엔드포인트에 HTTP 요청을 보냅니다.
curl test.local:NodePort
예를 들어:
curl test.local:32518
<NodePort>를 nginx-ingress-controller 서비스의 NodePort로 바꿉니다.
모든 것이 올바르게 설정되었다면 Nginx 환영 페이지가 표시되어야 합니다.
웹 브라우저를 사용하여 test.local:<NodePort>/nginx를 방문하여 Ingress 를 테스트할 수도 있습니다.
축하합니다. Kubernetes 에서 Ingress 리소스를 성공적으로 설정하고 올바르게 작동하는지 테스트했습니다.
요약
이 랩에서는 Kubernetes 에서 Nginx Ingress 컨트롤러를 설정하고 구성하는 과정을 살펴보았습니다. 또한 샘플 애플리케이션을 생성하고 Ingress 를 사용하여 외부 트래픽을 Nginx 서비스로 라우팅했습니다. 이는 Kubernetes 네트워킹으로 할 수 있는 일의 시작일 뿐이며, 더 자세히 탐구해 보시기를 권장합니다.


