반응형
Notice
Recent Posts
Recent Comments

04-29 15:59
관리 메뉴

SaevOps

[쿠버네티스] 인그레스 / 인그레스 컨트롤러 본문

클라우드/Kubernetes

[쿠버네티스] 인그레스 / 인그레스 컨트롤러

세브웁스 2022. 10. 26. 12:00
반응형

이론

인그레스란?

  • 고유한 주소를 제공해 사용 목적에 따라 다른 응답을 제공 가능
  • 트래픽에 대한 L4/L7 로드밸런서와 보안 인증서를 처리
  • 사용자가 접속하는 경로에 따라 다른 결괏값 제공 목적

인그레스 컨트롤러 작동 방법

  • 노드마다 설정된 노드 포트를 통해 노드 포트 서비스로 접속 ( 노드 포트 서비스 = 인그레스 컨트롤러 )
  • 사용자의 접속 경로에 따라 적합한 클러스터 IP 서비스로 경로 제공
  • 클러스터 IP 서비스는 사용자를 해당 파트로 연결

nginx 인그레스 컨트롤러 서비스 구성


실습

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

처음 보는 서비스 구성도라 이해하는데 시간이 좀 걸렸습니다.

간략하게 정리하면,

  1. 사용자 -> 워커노드
  2. 워커 노드 -> 노드포트 서비스
  3. 노드포트 서비스 -> ClusterIP 서비스
  4. ClusterIP 서비스 -> 워커노드 파드들

와 같은 과정으로 진행되는 것으로 확인됩니다.

반응형
Comments