27.5. AWS에서 수신 클러스터 트래픽 구성
OpenShift Container Platform에서는 클러스터에서 실행되는 서비스와 클러스터 외부에서 통신할 수 있습니다. 이 방법은 AWS의 로드 밸런서, 특히 NLB(Network Load Balancer) 또는 Classic Load Balancer(CLB)를 사용합니다. 두 가지 유형의 로드 밸런서 모두 클라이언트의 IP 주소를 노드로 전달할 수 있지만 CLB에는 OpenShift Container Platform이 자동으로 활성화하는 프록시 프로토콜 지원이 필요합니다.
NLB를 사용하도록 Ingress 컨트롤러를 구성하는 방법은 다음 두 가지가 있습니다.
-
현재 CLB를 사용하고 있는 Ingress 컨트롤러를 강제로 교체합니다. 이렇게 하면 새 DNS 레코드가 전파되고 NLB가 프로비저닝되는 동안
IngressController
오브젝트가 삭제되고 중단이 발생합니다. -
CLB를 사용하여 NLB를 사용하는 기존 Ingress 컨트롤러를 편집합니다. 이렇게 하면
IngressController
오브젝트를 삭제하고 다시 생성할 필요 없이 로드 밸런서가 변경됩니다.
두 방법 모두 NLB에서 CLB로 전환하는 데 사용할 수 있습니다.
이러한 로드 밸런서를 새 또는 기존 AWS 클러스터에서 구성할 수 있습니다.
27.5.1. AWS에서 클래식 로드 밸런서 시간 제한 구성
OpenShift Container Platform에서는 특정 경로 또는 Ingress 컨트롤러에 대한 사용자 정의 시간 제한 기간을 설정하는 방법을 제공합니다. 또한 AWS Classic Load Balancer(CLB)의 기본 시간 제한은 60초입니다.
CLB의 시간제한 기간이 경로 시간 초과 또는 Ingress 컨트롤러 타임아웃보다 짧은 경우 로드 밸런서는 연결을 조기에 종료할 수 있습니다. 경로와 CLB의 시간 제한 시간을 모두 늘려 이 문제를 방지할 수 있습니다.
27.5.1.1. 경로 시간 초과 구성
SLA(Service Level Availability) 목적에 필요한 낮은 시간 초과 또는 백엔드가 느린 경우 높은 시간 초과가 필요한 서비스가 있는 경우 기존 경로에 대한 기본 시간 초과를 구성할 수 있습니다.
사전 요구 사항
- 실행 중인 클러스터에 배포된 Ingress 컨트롤러가 필요합니다.
절차
oc annotate
명령을 사용하여 경로에 시간 초과를 추가합니다.$ oc annotate route <route_name> \ --overwrite haproxy.router.openshift.io/timeout=<timeout><time_unit> 1
- 1
- 지원되는 시간 단위는 마이크로초(us), 밀리초(ms), 초(s), 분(m), 시간(h) 또는 일(d)입니다.
다음 예제에서는 이름이
myroute
인 경로에서 2초의 타임아웃을 설정합니다.$ oc annotate route myroute --overwrite haproxy.router.openshift.io/timeout=2s
27.5.1.2. 클래식 로드 밸런서 시간 제한 설정
Classic Load Balancer(CLB)의 기본 시간 초과를 구성하여 유휴 연결을 확장할 수 있습니다.
사전 요구 사항
- 실행 중인 클러스터에 배포된 Ingress 컨트롤러가 있어야 합니다.
프로세스
다음 명령을 실행하여 기본
ingresscontroller
에 대해 AWS 연결 유휴 타임아웃을 5분으로 설정합니다.$ oc -n openshift-ingress-operator patch ingresscontroller/default \ --type=merge --patch='{"spec":{"endpointPublishingStrategy": \ {"type":"LoadBalancerService", "loadBalancer": \ {"scope":"External", "providerParameters":{"type":"AWS", "aws": \ {"type":"Classic", "classicLoadBalancer": \ {"connectionIdleTimeout":"5m"}}}}}}}'
선택 사항: 다음 명령을 실행하여 시간 초과의 기본값을 복원하십시오.
$ oc -n openshift-ingress-operator patch ingresscontroller/default \ --type=merge --patch='{"spec":{"endpointPublishingStrategy": \ {"loadBalancer":{"providerParameters":{"aws":{"classicLoadBalancer": \ {"connectionIdleTimeout":null}}}}}}}'
현재 범위가 이미 설정되어 있지 않으면 연결 시간 초과 값을 변경할 때 scope
필드를 지정해야 합니다. scope
필드를 설정할 때 기본 시간 초과 값을 복원하는 경우 다시 수행할 필요가 없습니다.
27.5.2. 네트워크 로드 밸런서를 사용하여 AWS에서 수신 클러스터 트래픽 구성
OpenShift Container Platform에서는 클러스터에서 실행되는 서비스와 클러스터 외부에서 통신할 수 있는 방법을 제공합니다. 이러한 방법 중 하나는 NLB(Network Load Balancer)를 사용합니다. 신규 또는 기존 AWS 클러스터에서 NLB를 구성할 수 있습니다.
27.5.2.1. Ingress 컨트롤러를 Classic Load Balancer를 네트워크 로드 밸런서로 전환
CLB(Network Load Balancer)를 AWS의 NLB(Network Load Balancer)를 사용하는 Ingress 컨트롤러를 사용할 수 있습니다.
이러한 로드 밸런서 간 전환은 IngressController
오브젝트가 삭제되지 않습니다.
이 절차에서는 다음과 같은 문제가 발생할 수 있습니다.
- 새로운 DNS 레코드 전파, 새로운 로드 밸런서 프로비저닝 및 기타 요인으로 인해 몇 분 정도 걸릴 수 있는 중단입니다. 이 절차를 적용한 후 Ingress 컨트롤러 로드 밸런서의 IP 주소 및 정식 이름이 변경될 수 있습니다.
- 서비스 주석이 변경되어 로드 밸런서 리소스가 유출되었습니다.
프로세스
NLB를 사용하여 전환할 기존 Ingress 컨트롤러를 수정합니다. 이 예에서는 기본 Ingress 컨트롤러에
외부
범위가 있고 다른 사용자 정의가 없다고 가정합니다.ingresscontroller.yaml
파일 예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
참고spec.endpointPublishingStrategy.loadBalancer.providerParameters.aws.type
필드에 값을 지정하지 않으면 Ingress 컨트롤러에서 설치 중에 설정된 클러스터Ingress
구성의spec.loadBalancer.platform.aws.type
값을 사용합니다.작은 정보Ingress 컨트롤러에 도메인 변경과 같이 업데이트할 다른 사용자 정의가 있는 경우 Ingress 컨트롤러 정의 파일을 대신 교체하는 것이 좋습니다.
명령을 실행하여 Ingress 컨트롤러 YAML 파일에 변경 사항을 적용합니다.
$ oc apply -f ingresscontroller.yaml
Ingress 컨트롤러 업데이트 중에 몇 분의 중단이 예상됩니다.
27.5.2.2. Ingress 컨트롤러를 Network Load Balancer를 Classic Load Balancer로 전환
NLB(Network Load Balancer)를 사용하는 Ingress 컨트롤러를 AWS에서 CLB( Classic Load Balancer)를 사용하는 컨트롤러로 전환할 수 있습니다.
이러한 로드 밸런서 간 전환은 IngressController
오브젝트가 삭제되지 않습니다.
이 절차에서는 새로운 DNS 레코드 전파, 새로운 로드 밸런서 프로비저닝 및 기타 요인으로 인해 몇 분 정도 걸릴 수 있는 중단이 발생할 수 있습니다. 이 절차를 적용한 후 Ingress 컨트롤러 로드 밸런서의 IP 주소 및 정식 이름이 변경될 수 있습니다.
절차
CLB를 사용하여 전환할 기존 Ingress 컨트롤러를 수정합니다. 이 예에서는 기본 Ingress 컨트롤러에
외부
범위가 있고 다른 사용자 정의가 없다고 가정합니다.ingresscontroller.yaml
파일 예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: Classic type: LoadBalancerService
참고spec.endpointPublishingStrategy.loadBalancer.providerParameters.aws.type
필드에 값을 지정하지 않으면 Ingress 컨트롤러에서 설치 중에 설정된 클러스터Ingress
구성의spec.loadBalancer.platform.aws.type
값을 사용합니다.작은 정보Ingress 컨트롤러에 도메인 변경과 같이 업데이트할 다른 사용자 정의가 있는 경우 Ingress 컨트롤러 정의 파일을 대신 교체하는 것이 좋습니다.
명령을 실행하여 Ingress 컨트롤러 YAML 파일에 변경 사항을 적용합니다.
$ oc apply -f ingresscontroller.yaml
Ingress 컨트롤러 업데이트 중에 몇 분의 중단이 예상됩니다.
27.5.2.3. Ingress 컨트롤러 클래식 로드 밸런서를 네트워크 로드 밸런서로 교체
Classic Load Balancer(CLB)를 사용하는 Ingress 컨트롤러를 AWS에서 NLB(Network Load Balancer)를 사용하는 컨트롤러로 교체할 수 있습니다.
이 절차에서는 다음과 같은 문제가 발생할 수 있습니다.
- 새로운 DNS 레코드 전파, 새로운 로드 밸런서 프로비저닝 및 기타 요인으로 인해 몇 분 정도 걸릴 수 있는 중단입니다. 이 절차를 적용한 후 Ingress 컨트롤러 로드 밸런서의 IP 주소 및 정식 이름이 변경될 수 있습니다.
- 서비스 주석이 변경되어 로드 밸런서 리소스가 유출되었습니다.
프로세스
새 기본 Ingress 컨트롤러를 사용하여 파일을 생성합니다. 다음 예제에서는 기본 Ingress 컨트롤러에
외부
범위가 있고 다른 사용자 정의가 없다고 가정합니다.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
기본 Ingress 컨트롤러에 다른 사용자 지정이 있는 경우 파일을 적절하게 수정해야 합니다.
작은 정보Ingress 컨트롤러에 다른 사용자 지정 기능이 없고 로드 밸런서 유형만 업데이트하는 경우 "프로세스 로드 밸런서를 네트워크 로드 밸런서로 사용하지 못하도록 전환에서 Ingress 컨트롤러가 네트워크 로드 밸런서로 전환"에 자세히 설명된 절차를 고려하십시오.
Ingress 컨트롤러 YAML 파일을 강제 교체합니다.
$ oc replace --force --wait -f ingresscontroller.yml
Ingress 컨트롤러가 교체될 때까지 기다립니다. 몇 분의 중단이 발생할 것으로 예상합니다.
27.5.2.4. 기존 AWS 클러스터에서 Ingress 컨트롤러 네트워크 로드 밸런서 생성
기존 클러스터에서 AWS NLB(Network Load Balancer)가 지원하는 Ingress 컨트롤러를 생성할 수 있습니다.
사전 요구 사항
- AWS 클러스터가 설치되어 있어야 합니다.
인프라 리소스의
PlatformStatus
는 AWS여야 합니다.PlatformStatus
가 AWS인지 확인하려면 다음을 실행합니다.$ oc get infrastructure/cluster -o jsonpath='{.status.platformStatus.type}' AWS
프로세스
기존 클러스터에서 AWS NLB가 지원하는 Ingress 컨트롤러를 생성합니다.
Ingress 컨트롤러 매니페스트를 생성합니다.
$ cat ingresscontroller-aws-nlb.yaml
출력 예
apiVersion: operator.openshift.io/v1 kind: IngressController metadata: name: $my_ingress_controller1 namespace: openshift-ingress-operator spec: domain: $my_unique_ingress_domain2 endpointPublishingStrategy: type: LoadBalancerService loadBalancer: scope: External3 providerParameters: type: AWS aws: type: NLB
클러스터에서 리소스를 생성합니다.
$ oc create -f ingresscontroller-aws-nlb.yaml
새 AWS 클러스터에서 Ingress 컨트롤러 NLB를 구성하려면 먼저 설치 구성 파일 생성 절차를 완료해야 합니다.
27.5.2.5. 새 AWS 클러스터에서 Ingress 컨트롤러 네트워크 로드 밸런서 생성
새 클러스터에서 AWS NLB(Network Load Balancer)가 지원하는 Ingress 컨트롤러를 생성할 수 있습니다.
사전 요구 사항
-
install-config.yaml
파일을 생성하고 수정합니다.
프로세스
새 클러스터에서 AWS NLB가 지원하는 Ingress 컨트롤러를 생성합니다.
설치 프로그램이 포함된 디렉터리로 변경하고 매니페스트를 생성합니다.
$ ./openshift-install create manifests --dir <installation_directory> 1
- 1
- &
lt;installation_directory
>는 클러스터의install-config.yaml
파일이 포함된 디렉터리의 이름을 지정합니다.
<
installation_directory>/manifests/ 디렉터리에
cluster-ingress-default-ingresscontroller.yaml
이라는 이름으로 파일을 생성합니다.$ touch <installation_directory>/manifests/cluster-ingress-default-ingresscontroller.yaml 1
- 1
- &
lt;installation_directory
>는 클러스터의manifests/
디렉터리가 포함된 디렉터리 이름을 지정합니다.
파일이 생성되면 다음과 같이 여러 네트워크 구성 파일이
manifests/
디렉터리에 있습니다.$ ls <installation_directory>/manifests/cluster-ingress-default-ingresscontroller.yaml
출력 예
cluster-ingress-default-ingresscontroller.yaml
편집기에서
cluster-ingress-default-ingresscontroller.yaml
파일을 열고 원하는 Operator 구성을 설명하는 CR(사용자 정의 리소스)을 입력합니다.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
-
cluster-ingress-default-ingresscontroller.yaml
파일을 저장하고 텍스트 편집기를 종료합니다. -
선택사항:
manifests/cluster-ingress-default-ingresscontroller.yaml
파일을 백업합니다. 설치 프로그램은 클러스터를 생성할 때manifests/
디렉터리를 삭제합니다.
27.5.3. 추가 리소스
- 네트워크 사용자 지정으로 AWS에 클러스터를 설치합니다.
- NLBs 지원에 대한 자세한 내용은 AWS에서 Network Load Balancer 지원을 참조하십시오.
- CLBs의 프록시 프로토콜 지원에 대한 자세한 내용은 클래식 로드 밸런서에 대한 프록시 프로토콜 지원구성을 참조하십시오.