IT STUDY LOG
[컨테이너 오케스트레이션] 04. 쿠버네티스 네트워크 본문
# 학습 목표
- 컨테이너 오케스트레이션이 무엇인지 이해할 수 있다.
- 쿠버네티스의 간단한 작동 원리를 이해할 수 있다.
- 쿠버네티스 리소스 명세를 작성할 수 있다.
- 파드 명세를 작성할 수 있다.
- 디플로이먼트 명세를 작성할 수 있다.
- 서비스를 이용해 파드를 노출할 수 있다.
- kubectl 명령어를 사용하여 리소스의 생성, 삭제, 조회를 할 수 있다.
- kubectl 명령어를 사용하여 롤아웃 관련 작업을 진행할 수 있다.
- 롤링 배포 현황을 확인할 수 있다.
- 새로운 버전에 문제가 발생했을 때 롤백할 수 있다.
(이하 advanced)
- liveness probe를 이용하여 파드의 health check를 할 수 있다.
- 쿠버네티스가 Stateful한 애플리케이션을 다루는 방법을 이해할 수 있다.
- 쿠버네티스에서 인그레스를 이용한 HTTP 기반 라우팅을 적용할 수 있다.
- helm 패키지 매니저를 사용할 수 있다.
# 학습 내용
1. 인그레스
인그레스
- 클러스터 내의 서비스에 대한 외부 접근을 관리하는 API 게이트웨이
- 일반적으로 HTTP를 관리하며 로드 밸런서, SSL Termination (클러스터 내에서는 HTTP로만 통신하게 하는 전환 과정), 가상 호스팅을 제공
인그레스 생성 및 적용
1) 기존 서비스 타입을 LoadBalancer로 ClusterIP로 바꾸고 적용. ClusterIP는 클러스터 내에서만 접근 가능하며 더 이상 EXTERNAL-IP는 사용할 수 없음
2) 인그레스 리소스를 다음과 같이 만들고 적용
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: nginx
namespace: default
spec:
rules:
- host: localhost
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: nginx
port:
number: 80
3) 인그레스는 kubectl get all로는 조회가 안되므로 kubectl get all, ingresses 사용해 생성된 인그레스 조회
$ kubectl apply -f application.yaml
deployment.apps/nginx-deployment created
$ kubectl apply -f service.yaml
service/nginx-service created
$ kubectl apply -f ingress.yaml
ingress.networking.k8s.io/nginx-ingress created
$ kubectl get all,ingresses
# pods 정보
NAME READY STATUS RESTARTS AGE
pod/nginx-deployment-85996f8dbd-tkmg7 1/1 Running 1 (3m10s ago) 122m
# service 정보
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 123m
service/nginx-service ClusterIP 10.98.165.212 <none> 80/TCP 7m36s # loadbalancer가 아님
# deployment 정보
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/nginx-deployment 1/1 1 1 122m
# replicaset 정보
NAME DESIRED CURRENT READY AGE
replicaset.apps/nginx-deployment-85996f8dbd 1 1 1 122m
# ingress 정보
NAME CLASS HOSTS ADDRESS PORTS AGE
ingress.networking.k8s.io/nginx-ingress nginx localhost 192.168.49.2 80 8m42s
4) 인그레스는 인그레스 리소스(정책 그 자체) 외에도 인그레스 컨트롤러(정책을 실행시키는 도구)가 반드시 필요함
※ minikube를 사용하는 경우, 인그레스 컨트롤러는 애드온으로 별도의 설치가 필요합니다. 공식 문서를 참고해서 nginx 인그레스 컨트롤러를 활성화
# NGINX 인그레스 컨트롤러를 활성화
$ minikube addons enable ingress
💡 ingress is an addon maintained by Kubernetes. For any concerns contact minikube on GitHub.
You can view the list of minikube maintainers at: https://github.com/kubernetes/minikube/blob/master/OWNERS
💡 After the addon is enabled, please run "minikube tunnel" and your ingress resources would be available at "127.0.0.1"
▪ Using image registry.k8s.io/ingress-nginx/kube-webhook-certgen:v20230312-helm-chart-4.5.2-28-g66a760794
▪ Using image registry.k8s.io/ingress-nginx/controller:v1.7.0
▪ Using image registry.k8s.io/ingress-nginx/kube-webhook-certgen:v20230312-helm-chart-4.5.2-28-g66a760794
🔎 Verifying ingress addon...
🌟 'ingress' 애드온이 활성화되었습니다
# NGINX 인그레스 컨트롤러가 실행 중인지 확인
$ kubectl get pods -n ingress-nginx
NAME READY STATUS RESTARTS AGE
ingress-nginx-admission-create-qtm5q 0/1 Completed 0 58s
ingress-nginx-admission-patch-2mvkb 0/1 Completed 1 58s
ingress-nginx-controller-6cc5ccb977-7wwvr 1/1 Running 0 58s
5) 터널을 열고, http://localhost에 접속
$ minikube tunnel
인그레스의 필요성
- 서비스를 활용해 외부 IP 주소를 할당해 주는 서비스와 로드 밸런서를 생성하고 컨테이너로 트래픽을 보내는 방법을 이용해 애플리케이션(파드)을 외부에 노출시킬 수 있는데 왜 인그레스를 별도로 사용해야할까?
- 인그레스 리소스는 로드 밸런싱과 더불어 호스트 기반 라우팅을 지원하기 때문
- 앞서 만든 서비스의 경우 LoadBalancer에서 ClusterIP로 바꿨기 때문에 인그레스가 로드 밸런서의 역할을 수행해야 함
- 아주 단순한 애플리케이션도 서비스는 두 개 이상의 HTTP 요청을 가지는 것이 보통 (보통 각각 Web Server와 WAS로 대표)
- 이러한 서비스의 접근을 별도의 포트로 구분하여 접속하게 할 수도 있지만, 하나의 호스트 상에서 라우팅으로 구분하면 보다 유연한 서비스를 만들 수 있음
- Web Server는 /로, WAS는 /api로 라우팅 가능
- YAML 파일에서 spec.rules.host에 별도의 호스트를 지정하여 Web Server는 www.mydomain.click, WAS는 api.mydomain.click으로 설정하는 것도 가능
인그레스 컨트롤러란?
- 흔히 잘 알고 있는 nginx와 같은 애플리케이션이 바로 인그레스 컨트롤러 (nginx가 하는 일이 결국 호스트 기반 라우팅과 로드 밸런싱이므로)
- 즉 인그레스 컨트롤러는 규칙을 이행하는 실질적인 애플리케이션 컨테이너
'devops bootcamp 4 > DevOps 인프라 관리' 카테고리의 다른 글
[서비스 모니터링] 02. 쿠버네티스 클러스터 모니터링 (0) | 2023.06.02 |
---|---|
[서비스 모니터링] 01. 모니터링의 목표와 측정 항목 (0) | 2023.06.02 |
[컨테이너 오케스트레이션] 03. 쿠버네티스 구성 요소 (0) | 2023.05.22 |
[컨테이너 오케스트레이션] 02. 쿠버네티스 워크로드 (0) | 2023.05.18 |
[컨테이너 오케스트레이션] 01. 쿠버네티스 주요 개념 (0) | 2023.05.17 |