SaevOps
[쿠버네티스] 인그레스 / 인그레스 컨트롤러 본문
반응형
이론
인그레스란?
- 고유한 주소를 제공해 사용 목적에 따라 다른 응답을 제공 가능
- 트래픽에 대한 L4/L7 로드밸런서와 보안 인증서를 처리
- 사용자가 접속하는 경로에 따라 다른 결괏값 제공 목적
인그레스 컨트롤러 작동 방법
- 노드마다 설정된 노드 포트를 통해 노드 포트 서비스로 접속 ( 노드 포트 서비스 = 인그레스 컨트롤러 )
- 사용자의 접속 경로에 따라 적합한 클러스터 IP 서비스로 경로 제공
- 클러스터 IP 서비스는 사용자를 해당 파트로 연결
실습
Nginx 인그레스 설정
테스트용 디플로이먼트 2개 배포
[root@m-k8s ~]# kubectl create deployment in-hname-pod --image=sysnet4admin/echo-hname
deployment.apps/in-hname-pod created
[root@m-k8s ~]# kubectl create deployment in-ip-pod --image=sysnet4admin/echo-ip
deployment.apps/in-ip-pod created
nginx 인그레스 컨트롤러 설치
[root@m-k8s ~]# kubectl apply -f ~/_Book_k8sInfra/ch3/3.3.2/ingress-nginx.yaml
namespace/ingress-nginx created
configmap/nginx-configuration created
configmap/tcp-services created
configmap/udp-services created
serviceaccount/nginx-ingress-serviceaccount created
clusterrole.rbac.authorization.k8s.io/nginx-ingress-clusterrole created
role.rbac.authorization.k8s.io/nginx-ingress-role created
rolebinding.rbac.authorization.k8s.io/nginx-ingress-role-nisa-binding created
clusterrolebinding.rbac.authorization.k8s.io/nginx-ingress-clusterrole-nisa-binding created
deployment.apps/nginx-ingress-controller created
limitrange/ingress-nginx created
nginx 컨트롤러의 파드 배포 확인
[root@m-k8s ~]# kubectl get pods -n ingress-nginx
NAME READY STATUS RESTARTS AGE
nginx-ingress-controller-5bb8fb4bb6-prt4x 0/1 ContainerCreating 0 25s
인그레스 경로와 작동 정의
[root@m-k8s ~]# kubectl apply -f ~/_Book_k8sInfra/ch3/3.3.2/ingress-config.yaml
ingress.networking.k8s.io/ingress-nginx created
인그레스 설정 파일 등록 확인
[root@m-k8s ~]# kubectl get ingress
NAME CLASS HOSTS ADDRESS PORTS AGE
ingress-nginx <none> * 80 29s
[root@m-k8s ~]# kubectl get ingress -o yaml
apiVersion: v1
items:
- apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
kubectl.kubernetes.io/last-applied-configuration: |
{"apiVersion":"networking.k8s.io/v1beta1","kind":"Ingress","metadata":{"annotations":{"nginx.ingress.kubernetes.io/rewrite-target":"/"},"name":"ingress-nginx","namespace":"default"},"spec":{"rules":[{"http":{"paths":[{"backend":{"serviceName":"hname-svc-default","servicePort":80},"path":null},{"backend":{"serviceName":"ip-svc","servicePort":80},"path":"/ip"},{"backend":{"serviceName":"your-svc","servicePort":80},"path":"/your-directory"}]}}]}}
nginx.ingress.kubernetes.io/rewrite-target: /
creationTimestamp: "2022-10-25T02:45:29Z"
generation: 1
...
노드포트 서비스로 nginx 인그레스 컨트롤러 외부에 노출
[root@m-k8s ~]# kubectl apply -f ~/_Book_k8sInfra/ch3/3.3.2/ingress.yaml
service/nginx-ingress-controller created
노드 포트 서비스로 생성된 nginx 인그레스 컨트롤러 확인
[root@m-k8s ~]# kubectl get services -n ingress-nginx
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
nginx-ingress-controller NodePort 10.102.77.230 <none> 80:30100/TCP,443:30101/TCP 38s
expose 명령어로 디플로이먼트도 서비스로 노출
[root@m-k8s ~]# kubectl expose deployment in-hname-pod --name=hname-svc-default --port=80,443
service/hname-svc-default exposed
[root@m-k8s ~]# kubectl expose deployment in-ip-pod --name=ip-svc --port=80,443
service/ip-svc exposed
홈페이지로 확인
이후 디플로이먼트 및 서비스, 인그레스 컨트롤러 관련된 내용도 모두 삭제
[root@m-k8s ~]# kubectl expose deployment in-hname-pod --name=hname-svc-default --port=80,443
service/hname-svc-default exposed
[root@m-k8s ~]# kubectl expose deployment in-ip-pod --name=ip-svc --port=80,443
service/ip-svc exposed
[root@m-k8s ~]# kubectl delete deployment in-hname-pod
deployment.apps "in-hname-pod" deleted
[root@m-k8s ~]# kubectl delete deployment in-ip-pod
deployment.apps "in-ip-pod" deleted
[root@m-k8s ~]# kubectl delete services hname-svc-default
service "hname-svc-default" deleted
[root@m-k8s ~]# kubectl delete services ip-svc
[root@m-k8s ~]# kubectl delete -f ~/_Book_k8sInfra/ch3/3.3.2/ingress-nginx.yaml
[root@m-k8s ~]# kubectl delete -f ~/_Book_k8sInfra/ch3/3.3.2/ingress-config.yaml

처음 보는 서비스 구성도라 이해하는데 시간이 좀 걸렸습니다.
간략하게 정리하면,
- 사용자 -> 워커노드
- 워커 노드 -> 노드포트 서비스
- 노드포트 서비스 -> ClusterIP 서비스
- ClusterIP 서비스 -> 워커노드 파드들
와 같은 과정으로 진행되는 것으로 확인됩니다.
반응형
'클라우드 > Kubernetes' 카테고리의 다른 글
[OCI] OKE 구성 (0) | 2022.11.25 |
---|---|
[쿠버네티스] 아키텍처 및 구성도 (0) | 2022.11.23 |
[쿠버네티스] 노드포트 / 클러스터 내부 접속 / 부하분산 (0) | 2022.10.25 |
[쿠버네티스] 파드 업그레이드 / 복구 (0) | 2022.10.21 |
[쿠버네티스] 파드의 동작 보증 / cordon / drain (0) | 2022.10.20 |
Comments