오늘은 쿠버네티스를 활용해 네트워크 통신에 활용되는 리소스들인 Service, Load Balancer, Ingress의 생성 및 배포 과정을 담아보려고한다.
이전에 배포한 Pod, Replicaset, Deployment에 연결하여 직접 배포된 서비스에 접근해보자
Part1: Service


위의 서버 내부 그림을 잘 이해하면 통신의 과정을 이해할 수 있게된다.
서버 외부에서는 {마스터 노드의 public ip번호}:{노드포트번호}를 통해 접근을 한다.
1). NodePort IP: 방식 서비스 배포
NodePort IP는 외부 접속용 데이트로 외부 요청을 받기 위한 개념이다.
외부에서 노드의 30000번 포트로 신호가 들어오면 -> 서비스가 이를 받아 -> 내부의 파드(80번 포트 등)로 전달합니다.
1-1. deployemtn 생성
kubectl create deployment kym-deployment --image=nginx:1.26 --port=80 --replicas=2 -n kym-ns
1-2. NodePort 방식의 서비스 생성
kubectl expose deployment kym-deployment --type NodePort --port 80 --target-port 80 --name kym-svc -n kym-ns
1-3. 접근
{마스터 노드 Public IP}:{Service의 NodePort번호}
2) Cluster IP: 방식 서비스 배포
Cluster IP의 역할은 외부 요청을 받는 NodePort와 다르게 클러스터 내부 전용 가상 IP이다.
파드는 삭제되고 생성될 때마다 IP주소가 바뀐다. 그런데 pod들끼리 통신하려면 때마다 바뀐 IP를 찾는 것은 어렵다.
그래서 단 하나의 고정 IP값을 가진 서비스를 사용하여 파드들끼리 개발 IP가 아닌 서비스의 고정 IP를 통해 통신하는 역할이다.
2-1. deployment 배포


2-2. Cluster IP 방식의 서비스 배포


2-3. 접근 (임시 파드를 생성해 내부 접근 확인)

임시 테스트 pod하나를 띄우고 bash로 내부 pod로 접속해서 내부 pod에서 service에 접근이 되는지를 테스트함.
파드끼리의 연결을 확인하기 위함이다.
3) LoadBalancer: 방식 서비스 배포
LoadBalancer 서비스의 역할은 외부의 전용 로드밸런서 장비에게 외부 IP하나만 빌려줘라고 요청하는 방식입니다.
LoadBalancer 타입 서비스는 내부적으로 Cluster IP와 NodePort를 모두 포함하고 있다.
3-1. deploy배포



3-2. LoadBalancer 배포


LoadBalancer는 외부IP도 생성되고 노드 포트도 생성되고 Cluster IP도 생성된다.
그렇다고 바로 외부에서 접근이 가능한 것은 아니다.
왜냐하면 외부 요청에 대해 응답하는 역할이 하나도 없기 때문이다.
네트워크 장비(라우터)가 해당 외부 요청에 대해서 클러스터랑 연결되어야하는데 누구 ip인지 모르기 때문에,
연결시켜줄 역할이 없어 접근이 안되는 것이다.
그래서 우리는 네트워크 인터페이스를 만들어 그 역할을 하게 만들어주는 것이다.

3-3. 접속 확인 - 연결한 네트워크 인터페이스의 public IP + LoadBalancer의 NodePort번호로 연결 확인.

Part2: Ingress

Ingress는 로드밸런서 IP당 하나의 서비스만 연결할 수 있는 경우가 많지만 인그레스는 하나의 IP로 여러 서비스를 운영할 수 있게해주는 역할이다.
1) 일반 Ingress 배포
2-1. deployment 배포

2-2. Ingress 배포

2-3. 확인

위의 실습은 deploy로 pod를 만들고 service와 연결하면서 배포를 한거야
그런데 service가 cluster ip타입이라 외부 접근이 안되니까 ingress를 만들어서 연결해준 것이다.
2) Ingress 경로 기반 라우팅.
2-1. 3개의 각 deployment 및 service 배포


2-2. 3개의 service를 경로 기반 분기처리하는 ingress 배포



2-3. 확인

2-4. 이번에는 ingress에 host url을 붙여서 접근

2-5. 서비스별로 서로 다른 ingress를 설정한 경우

이렇게 오늘은 쿠버네티스의 주요 리소스들 중 네트워크 리소스를 중심으로 알아보았다.
이제는 클러스터 노드의 제어와 환경변수, Secret값 사용 등 다양한 쿠버네티스의 리소스를
다음 장에 이어 알아보록하겠다.