28.5. 로드 밸런서를 사용하여 수신 클러스터 트래픽 구성
OpenShift Container Platform에서는 클러스터에서 실행되는 서비스와 클러스터 외부에서 통신할 수 있습니다. 이 방법에서는 로드 밸런서를 사용합니다.
28.5.1. 로드 밸런서를 사용하여 클러스터로 트래픽 가져오기
특정 외부 IP 주소가 필요하지 않은 경우 OpenShift Container Platform 클러스터에 대한 외부 액세스를 허용하도록 로드 밸런서 서비스를 구성할 수 있습니다.
로드 밸런서 서비스에서는 고유 IP를 할당합니다. 로드 밸런서에는 VIP(가상 IP)일 수 있는 단일 엣지 라우터 IP가 있지만 이는 초기 로드 밸런싱을 위한 단일 머신에 불과합니다.
풀이 구성된 경우 클러스터 관리자가 아닌 인프라 수준에서 수행됩니다.
이 섹션의 절차에는 클러스터 관리자가 수행해야 하는 사전 요구 사항이 필요합니다.
28.5.2. 사전 요구 사항
다음 절차를 시작하기 전에 관리자는 다음을 수행해야 합니다.
- 요청이 클러스터에 도달할 수 있도록 외부 포트를 클러스터 네트워킹 환경으로 설정합니다.
클러스터 관리자 역할의 사용자가 한 명 이상 있는지 확인합니다. 이 역할을 사용자에게 추가하려면 다음 명령을 실행합니다.
$ oc adm policy add-cluster-role-to-user cluster-admin username
- 클러스터에 대한 네트워크 액세스 권한이 있는 마스터와 노드가 클러스터 외부에 각각 1개 이상씩 있는 OpenShift Container Platform 클러스터가 있어야 합니다. 이 절차에서는 외부 시스템이 클러스터와 동일한 서브넷에 있다고 가정합니다. 다른 서브넷에 있는 외부 시스템에 필요한 추가 네트워킹은 이 주제에서 다루지 않습니다.
28.5.3. 프로젝트 및 서비스 생성
노출하려는 프로젝트 및 서비스가 존재하지 않는 경우 프로젝트를 생성한 다음 서비스를 생성합니다.
프로젝트 및 서비스가 이미 존재하는 경우 서비스 노출 절차로 건너뛰어 경로를 생성합니다.
사전 요구 사항
-
OpenShift CLI(
oc
)를 설치하고 클러스터 관리자로 로그인합니다.
프로세스
oc new-project
명령을 실행하여 서비스에 대한 새 프로젝트를 생성합니다.$ oc new-project <project_name>
oc new-app
명령을 사용하여 서비스를 생성합니다.$ oc new-app nodejs:12~https://github.com/sclorg/nodejs-ex.git
서비스가 생성되었는지 확인하려면 다음 명령을 실행합니다.
$ oc get svc -n <project_name>
출력 예
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE nodejs-ex ClusterIP 172.30.197.157 <none> 8080/TCP 70s
참고기본적으로 새 서비스에는 외부 IP 주소가 없습니다.
28.5.4. 경로를 생성하여 서비스 노출
oc expose
명령을 사용하여 서비스를 경로로 노출할 수 있습니다.
사전 요구 사항
- OpenShift Container Platform에 로그인되어 있습니다.
프로세스
노출하려는 서비스가 있는 프로젝트에 로그인합니다.
$ oc project <project_name>
oc expose service
명령을 실행하여 경로를 노출합니다.$ oc expose service nodejs-ex
출력 예
route.route.openshift.io/nodejs-ex exposed
서비스가 노출되었는지 확인하려면
curl
과 같은 툴을 사용하여 클러스터 외부에서 서비스에 액세스할 수 있는지 확인할 수 있습니다.경로의 호스트 이름을 찾으려면 다음 명령을 입력합니다.
$ oc get route
출력 예
NAME HOST/PORT PATH SERVICES PORT TERMINATION WILDCARD nodejs-ex nodejs-ex-myproject.example.com nodejs-ex 8080-tcp None
호스트가 GET 요청에 응답하는지 확인하려면 다음 명령을 입력합니다.
curl
명령 예$ curl --head nodejs-ex-myproject.example.com
출력 예
HTTP/1.1 200 OK ...
28.5.5. 로드 밸런서 서비스 생성
다음 절차에 따라 로드 밸런서 서비스를 생성합니다.
사전 요구 사항
- 노출하려는 프로젝트와 서비스가 존재하는지 확인합니다.
- 클라우드 공급자는 로드 밸런서를 지원합니다.
프로세스
로드 밸런서 서비스를 생성하려면 다음을 수행합니다.
- OpenShift Container Platform 4에 로그인합니다.
노출하려는 서비스가 있는 프로젝트를 로드합니다.
$ oc project project1
필요에 따라 컨트롤 플레인 노드에서 텍스트 파일을 열고 다음 텍스트를 붙여넣고 파일을 편집합니다.
로드 밸런서 구성 파일 샘플
apiVersion: v1 kind: Service metadata: name: egress-2 1 spec: ports: - name: db port: 3306 2 loadBalancerIP: loadBalancerSourceRanges: 3 - 10.0.0.0/8 - 192.168.0.0/16 type: LoadBalancer 4 selector: name: mysql 5
참고로드 밸런서를 통한 트래픽을 특정 IP 주소로 제한하려면 Ingress 컨트롤러 필드
spec.endpointPublishingStrategy.loadBalancer.allowedSourceRanges
를 사용하는 것이 좋습니다.loadBalancerSourceRanges
필드를 설정하지 마십시오.- 파일을 저장하고 종료합니다.
다음 명령을 실행하여 서비스를 생성합니다.
$ oc create -f <file-name>
예를 들면 다음과 같습니다.
$ oc create -f mysql-lb.yaml
새 서비스를 보려면 다음 명령을 실행합니다.
$ oc get svc
출력 예
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE egress-2 LoadBalancer 172.30.22.226 ad42f5d8b303045-487804948.example.com 3306:30357/TCP 15m
활성화된 클라우드 공급자가 있는 경우 서비스에 외부 IP 주소가 자동으로 할당됩니다.
마스터에서 cURL과 같은 도구를 사용하여 공개 IP 주소로 서비스에 도달할 수 있는지 확인합니다.
$ curl <public-ip>:<port>
예를 들면 다음과 같습니다.
$ curl 172.29.121.74:3306
이 섹션의 예제에서는 클라이언트 애플리케이션이 필요한 MySQL 서비스를 사용합니다.
패킷이 잘못됨
이라는 메시지가 포함된 문자열이 표시되면 서비스에 연결된 것입니다.MySQL 클라이언트가 있는 경우 표준 CLI 명령으로 로그인하십시오.
$ mysql -h 172.30.131.89 -u admin -p
출력 예
Enter password: Welcome to the MariaDB monitor. Commands end with ; or \g. MySQL [(none)]>