Kubernetes 서비스의 개념과 인그레스
※ 본 내용은 「컨테이너 인프라 환경 구축을 위한 쿠버네티스/도커 - 길벗」를 참고하여 작성하였습니다.
쿠버네티스 사용시에도 외부와 연결이 필요합니다.
이 때 활용할 수 있는 방법이 노드포트(Node Port)를 사용하는 것 입니다.
노드포트 서비스를 설정하면 모든 워커노드의 특정 포트(노드포트)를 열고 여기로 오는 모든 요청을 노드포트 서비스로 전달합니다. 그리고 노드포트 서비스는 해당 업무를 처리할 수 있는 파드로 요청을 전달합니다.
노드포트 서비스는 포트를 중복 사용할 수 없어 1개의 노드포트에 1개의 디플로이먼트만 적용됩니다.
(여러 개의 디플로이먼트가 있을 경우? → 인그레스 사용)
노드포트 서비스로 외부에서 접속
노드포트는 아래와 같은 yaml 파일을 활용해서 설정할 수 있습니다.
kubectl create -f nodeport.yaml
사용하는 오브젝트 스펙은 아래와 같습니다.
# nodeport.yaml
apiVersion: v1
kind: Service
metadata:
name: np-svc
spec:
selector:
app: np-pods
ports:
- name: http
protocol: TCP
port: 80
targetPort: 80
nodePort: 30000
type: NodePort
노드포트로 생성한 np-svc 서비스는 아래와 같이 확인할 수 있습니다.
kubectl get services
파드 리스트를 보면 아래와 같이 확인할 수 있는데,
Internal-ip와 포트를 활용하여 호스트 PC의 웹브라우저에서 IP와 포트번호를 통해 접속 확인을 할 수 있습니다.
Internal-ip는 각 노드에서 ifconfig - eth1에서도 확인할 수 있습니다.
expose로 노드포트 서비스 생성
kubectl expose deployment np-pods --type=NodePort --name=np-svc-v2 --port=80
아래와 같이 포트번호는 임의로 지정됩니다.
아래와 같이 외부에서 무난히 접속됩니다.
인그레스(Ingress)
: 고유한 주소를 사용하여 사용목적에 따라 다른 응답을 제공할 수 있고, 트래픽에 대한 L4/L7 로드밸런서와 보안 인증서를 처리하는 기능을 제공합니다. 인그레스 컨트롤러와 같이 사용되어야 합니다.
순서는 정리하면 대략 아래와 같습니다.
1) 인그레스 컨트롤러 생성 _ kubectl apply -f ./ingress-nginx.yaml
2) 인그레스 설정 _ kubectl apply -f ./ingress-config.yaml
아래의 ingress-config.yaml 파일을 apply하여 설정을 적용합니다.
이 파일은 들어오는 주소값과 포트에 따라 노출된 서비스를 연결하는 역할을 설정합니다.
- 외부에서 주소값과 노드포트를 가지고 들어오는 것은 hname-svc-default서비스와 연결된 파드로 넘기고
- 외부에서 들어오는 주소값, 노드포트와 함께 뒤에 /ip를 추가한 주소값은 ip-svc 서비스와 연결돤 파드로 접속하게 합니다.
# ingress-config.yaml
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: ingress-nginx
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- http:
paths:
- path:
backend:
serviceName: hname-svc-default
servicePort: 80
- path: /ip
backend:
serviceName: ip-svc
servicePort: 80
- path: /your-directory
backend:
serviceName: your-svc
servicePort: 80
인그레스 설정 파일이 제대로 등록되었는지는 아래와 같이 확인합니다.
kubectl get ingress
인그레스에 요청한 내용이 확실하게 적용되었는지는 아래를 통해 확인합니다.
kubectl get ingress -o yaml
3) 노드포트 서비스로 인그레스 컨트롤러를 외부에 노출 _ kubectl apply -f ./ingress.yaml
4) 노드포트 서비스로 생성된 인그레스 컨트롤러 확인 _ kubectl get services -n ingress-nginx
5) expose로 디플로이먼트 서비스 노출
(1) hname-svc-default 노출 _ kubectl expose deployment in-hname-pod --name=hname-svc-default --port=80,443
(2) ip-svc 노출 _ kubectl expose deployment in-ip-pod --name=ip-svc --port=80,443
6) 웹 브라우저에서 접속 확인 (192.168.1.101:30100, 192.168.1.102:30100, 192.168.1.103:30100)
7) 웹 브라우저에서 접속 확인 (192.168.1.101:30100/ip, 192.168.1.102:30100/ip , 192.168.1.103:30100/ip )
'Data Engineering > docker, kubernetes(k8s)' 카테고리의 다른 글
Kubernetes 스테이트풀셋(StatefulSet)의 정의 및 사용방법 (0) | 2024.12.22 |
---|---|
Kubernetes LoadBalancer _ On-premise 기반 로드밸런서 (MetalLB), HPA (1) | 2024.12.20 |
Kubernetes 노드/파드 운영을 위한 명령어(생성, 변경, 삭제, replica, cordon, drain) (1) | 2024.12.18 |
Kubernetes 설치 및 설정 Code 분석, Pod 생명주기, 기본 명령어 (1) | 2024.12.17 |
Kubernetes(쿠버네티스, k8s)의 구조와 기본 용어 (feat. 한 권으로 배우는 도커&쿠버네티스, 한빛미디어) (0) | 2024.12.16 |
댓글