티스토리 뷰

728x170

 포스팅은 Kubernetes Ingress 활용 가이드입니다.


Kubernetes & Docker Install 과정을 살펴보며, 추후 CICD 구축에 활용될 수 있도록 하는데 목적이 있습니다.

Kubernetes는 애플리케이션을 외부로 노출하기 위해 Service Object를 NodePort로 생성합니다.

다만 노출 형태가 노드의 IP에 특정 포트(30000 ~ 32767)로 제공되기 때문에 호출이 까다롭고 사용자측면에서 관리가 어려울 수 있습니다.

이를 관리하여 외부 액세스 편의성을 제공하는 것이 Ingress입니다.

- Ingress는 외부 액세스를 관리하고 서비스를 묶어주는 역할을 수행합니다.

- 도메인을 지정하여 사용자는 그 도메인으로 접속하며 하위의 Path 설정을 통해 서비스를 라우팅합니다.

즉 요약하자면, Ingress를 통해 노출 된 URL로 사용자가 요청을 하면 이는 특정 서비스로 라우팅되고 서비스에서 로드밸런싱하여 Pod가 호출되는 원리입니다.



그럼 먼저 Ingress를 적용하는 방법에 대해 살펴보겠습니다.

이에 앞서 Pod의 노드 포트 및 현재 셋팅을 살펴보겠습니다.



- 서비스를 확인해보면 NodePort는 30490을 사용하고 있습니다.

이와 연계 된 디플로이먼트는 gs-spring-boot-docker-deployment입니다.


[root@k8s-master HPA]# kubectl get pod

NAME                                                READY   STATUS    RESTARTS   AGE

gs-spring-boot-docker-deployment-587545cc76-5slkt   1/1     Running   0          86m

[root@k8s-master HPA]# kubectl get service

NAME                            TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE

gs-spring-boot-docker-service   NodePort    10.106.48.153   <none>        8081:30490/TCP   29h

kubernetes                      ClusterIP   10.96.0.1       <none>        443/TCP          7d22h

[root@k8s-master HPA]# kubectl get deploy

NAME                               DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE

gs-spring-boot-docker-deployment   1         1         1            1           86m

[root@k8s-master HPA]#


- service, pod, deployment에 대한 초기 셋팅은 이전 포스팅을 참고하시구요.


이를 기반으로 Ingress를 적용해 보도록 하겠습니다.

1. 먼저 Ingress를 생성하기 위한 yaml파일을 작성합니다.

- gs-spring-boot-docker-ingress.yaml


  apiVersion: extensions/v1beta1

  kind: Ingress

  metadata:

    name: gs-spring-boot-docker-ingress

    annotations:

      ingress.kubernetes.io/rewrite-target: /

  spec:

    rules:

    - host: nara0617.nrson.net

      http:

        paths:

          - path: /hello-world

            backend:

              serviceName: gs-spring-boot-docker-service

              servicePort: 8080


주요 내용은 다음과 같습니다.

- kind : 생성할 오브젝트 타입을 결정합니다. Ingress를 생성하기 위해 작성합니다

- metadata.annotation.ingress.kubernetes.io/rewrite-target : Ingress의 기본 경로를 /로 구성

- spec.rules.host : Ingress에 지정할 호스트입니다. Ingress를 사용하기 위해서는, 먼저 DNS Server가 구성되어야 합니다. DNS와 HostName의 조합으로 DNS Server로 호스팅되게 됩니다. 예를 들어 Kubernetes에 구성된 도메인이 nrson.net이고 Ingress에 붙일 특정 호스트명은 nara0617이라고 한다면 nara0617.nrson.net으로 호스트를 지정하게 됩니다.

- spec.rules.http.paths.path : 라우팅 할 서버를 설정합니다.


2. 생성한 yaml 파일을 반영합니다.


[root@k8s-master Ingress]# kubectl apply -f ./gs-spring-boot-docker-ingress.yaml

ingress.extensions/gs-spring-boot-docker-ingress created

[root@k8s-master Ingress]#



3. 생성환 ingress를 확인해 보도록 하겠습니다.

먼저 cli 입니다.


[root@k8s-master Ingress]# kubectl get ingress

NAME                            HOSTS                ADDRESS   PORTS   AGE

gs-spring-boot-docker-ingress   nara0617.nrson.net             80      2m6s

[root@k8s-master Ingress]#


다음으로 대시보드입니다.



- 정상적으로 생성된 것을 확인할 수 있습니다.


그리드형
댓글
댓글쓰기 폼