ingresscontroller와 AWS NLB

이종완·2022년 8월 14일
0

개발이야기

목록 보기
3/12

개요

회사에서 사용중인 컨테이너 오케스트레이션 플랫폼 openshift의 마이그레이션(OCP3 -> OCP4)에 따라서, OCP4의 ingresscontroller에 맵핑될 AWS NLB를 설정한다

문제 발생

마이그레이션을 진행하면서, 은행의 코어 뱅킹 서버가 OCP4 클러스터에 배포해놓은 api 서비스를 호출할 수 있도록 OCP4 ingresscontroller와 맵핑된 AWS ELB의 주소를 코어뱅킹서버의 hosts파일에 저장해야 하지만, 맵핑된 로드밸런서의 종류는 CLB이기 때문에 고정 ip가 아니므로 hosts파일에 한번 저장하여 영구적으로 사용할 수 없는 문제가 생겼다

ingrsscontroller

openshift는 kubernetes 기반으로 만들어진 플랫폼이어서 ingresscontroller 개념은 동일하다
말 그대로 클러스터 내부로 들어오는 트래픽(ingress)을 통제하는 컴포넌트에 해당한다

AWS를 베이스 클라우드로 구축한 클러스터의 경우, AWS ELB와 맵핑되어 트래픽을 클러스터 내부로 분산시키는 역할을 수행한다

내가 다니는 곳의 API 시스템 클러스터는 마스터, 인프라, 워커 노드의 구조로 구성되어 있으며, 인프라 노드에 ingresscontroller 및 라우터 컨테이너가 구축되어 모든 ingress는 항상 인프라 노드로 먼저 유입되어 클러스터 내부로 분산된다

internet <-> ELB <-> ingress controller <-> pod

AWS ELB

이미 많은 사람들이 당연히 알고 있듯이, AWS 클라우드 서비스에는
하나 이상의 가용 영역(AZ)에 존재하는 여러 서비스들(람다, ec2)에 대해 트래픽을 자동으로 분산해주는 서비스이다

CLB (Classic Load Balancer)

AWS에서 곧 삭제 예정인 구식 로드밸런서로 http(s), tcp로 유입된 트래픽의 분산을 지원해준다

은행에 있어 CLB가 가지는 문제

그리고 이런 CLB가 가지는 문제는 로드밸런서의 고정 IP를 얻을 수 없다는 것이다
레거시 코어 뱅킹에서 API시스템을 경유하여 처리해야 하는 최신 업무 서비스를 구현하기 위해서는 코어뱅킹서버의 hosts파일에 API시스템의 ip주소를 등록하는 것이 필수불가결하다
이때, API시스템의 주소는 ELB 주소를 적게 되는데, ELB의 종류가 CLB 로드밸런서인 경우, ip가 바뀔때마다 인프라팀에 연락하여 코어뱅킹 시스템의 hosts파일을 매번 바꾸는 것은 굉장히 곤란하고 괴로운 일이 될 것이다

OCP4 ingresscontroller

현재 작성된 이 글을 시점으로 했을때 OCP4는 레드헷 사의 최신 플랫폼인 것에도 불구하고, ingresscontroller를 생성할 때 디폴트로 CLB를 생성하여 ingresscontroller와 맵핑된다

해결방법

결론적으로, ingresscontroller에 맵핑되어 있던 CLB를 NLB로 교체해주면 근본적으로 해결된다

redhat사에서는 기존에 설정된 ingresscontroller와 맵핑될 로드밸런서를 NLB로 바꿔주거나, 아예 NLB와 맵핑될 ingresscontroller를 새로 생성해주는 방법에 대한 레퍼런스를 제공해주고 있다
관련 레퍼런스는 여기에 있다

기존 ingresscontroller에 맵핑된 CLB를 NLB로 교체하는 경우

교체하고자 하는 ingresscontroller의 yml 설정파일에 spec.endpointPublishingStrategy.loadBalancer.providerParameters.aws.type=NLB속성을 추가하여 강제 replace를 수행한다
(단, 전제조건은 AWS를 클라우드 서비스로 사용하고 있으며, OCP는 로드밸런서를 생성할 수 있는 권한이 있어야 한다)
레퍼런스에서 제공하는 샘플은 다음과 같다

# ingresscontroller.yml
apiVersion: operator.openshift.io/v1
kind: IngressController
metadata:
  creationTimestamp: null
  name: default
  namespace: openshift-ingress-operator
spec:
  endpointPublishingStrategy:
    loadBalancer:
      scope: External
      providerParameters:
        type: AWS
        aws:
          type: NLB
    type: LoadBalancerService

샘플대로 진행하던, 커스텀을 가미하던 설정파일 yml이 준비되면 ocp cli 커맨드를 다음과 같이 수행해준다
(여기서 준비된 설정파일 yml의 이름은 ingresscontroller.yml라고 가정한다)
oc replace --force --wait -f ingresscontroller.yml

ingresscontroller와 NLB를 신규 생성할 경우

기본적으로 CLB -> NLB로 교체하는 경우와 핵심은 동일하다

yml 파일에 spec.endpointPublishingStrategy.loadBalancer.providerParameters.aws.type=NLB속성을 추가하여 배포하는 것

예시로 레퍼런스에서 제공하는 yml은 다음과 같다

apiVersion: operator.openshift.io/v1
kind: IngressController
metadata:
  name: $my_ingress_controller
  namespace: openshift-ingress-operator
spec:
  domain: $my_unique_ingress_domain
  endpointPublishingStrategy:
    type: LoadBalancerService
    loadBalancer:
      scope: External
      providerParameters:
        type: AWS
        aws:
          type: NLB

yml 구성 후 oc cli를 이용하여 ocp 클러스터에 새로 배포해준다

oc create -f ingresscontroller-aws-nlb.yaml

참조

공식레퍼런스

profile
안녕하세요...

0개의 댓글