앱 노출 서비스 선택

Red Hat OpenShift Ingress 제어기 또는 IBM Cloud® Kubernetes Service NodePort 또는 네트워크 로드 밸런서를 사용하여 앱을 외부 트래픽에 안전하게 노출하십시오.

앱 노출에 대한 옵션 이해

앱을 외부 트래픽에 안전하게 노출시키려면 다음 서비스 중에서 선택할 수 있습니다.

Red Hat OpenShift Ingress 제어기

Red Hat OpenShift Ingress 컨트롤러를 사용하여 라우팅을 설정함으로써 클러스터 내의 여러 앱을 노출시킵니다. Ingress 제어기는 Ingress 하위 도메인을 보안 및 고유 공용 또는 개인용 시작점으로 사용하여 수신 요청을 라우팅합니다. 하나의 하위 도메인을 사용하여 서비스로서 클러스터의 여러 앱을 노출할 수 있습니다. Ingress 제어기 솔루션은 세 개의 컴포넌트를 사용합니다.

  • 클러스터에서 Ingress 제어기를 관리하는 Ingress 오퍼레이터.
  • Ingress 제어기는 앱에 대한 라우팅 규칙을 구현하여 클러스터의 앱에 대한 모든 수신 트래픽을 관리하는 HAProxy 기반 Kubernetes 서비스입니다. 이 제어기는 Ingress 오퍼레이터가 관리합니다. Ingress 제어기는 수신 HTTP 또는 HTTPS 서비스 요청을 청취한 후 Ingress 리소스에 정의되고 Ingress 제어기로 구현되는 규칙에 따라서만 해당 앱에 대한 팟(Pod)에 요청을 전달합니다.
  • 라우트 리소스는 앱에 대한 수신 요청을 라우팅하고 로드 밸런싱하는 방법의 규칙을 정의합니다.

라우트는 서비스를 <service_name>-<project>.<cluster_name>-<random_hash>-0000.<region>.containers.appdomain.cloud 형식의 호스트 이름으로 노출합니다. Ingress 제어기는 기본적으로 클러스터에 배치되며, 이를 통해 외부 클라이언트가 라우트를 사용할 수 있습니다. Ingress 제어기는 서비스 선택기를 사용하여 서비스 및 서비스를 백업하는 엔드포인트를 찾습니다. 하나의 라우트를 통한 트래픽이 여러 서비스로 향하도록 서비스 선택기를 구성할 수 있습니다. 또한 Ingress 제어기가 호스트 이름에 대해 지정한 TLS 인증서를 사용하여 비보안 또는 보안 라우트를 작성할 수 있습니다. Ingress 제어기는 HTTP 및 HTTPS 프로토콜만 지원합니다.

NodePort

Kubernetes 서비스로 앱을 노출하면 30000 - 32767 범위의 NodePort 및 내부 클러스터 IP 주소가 서비스에 지정됩니다. 클러스터 외부에서 서비스에 액세스하기 위해 작업자 노드의 공인 또는 사설 IP 주소와 NodePort를 <IP_address>:<nodeport> 형식으로 사용합니다. 그러나 작업자 노드의 공인 및 사설 IP 주소는 영구적이지 않습니다. 작업자 노드가 제거되거나 다시 작성되면 새 공인 및 새 사설 IP 주소가 작업자 노드에 지정됩니다. NodePort는 짧은 시간에만 공용 또는 개인용 액세스를 테스트하거나 액세스 권한을 제공하는 데 적합합니다.

LoadBalancer

LoadBalancer 서비스 유형은 클러스터의 인프라 제공자에 따라 다르게 구현됩니다.

  • 클래식 클러스터: 네트워크 로드 밸런서(NLB). 모든 표준 클러스터는 앱에 대한 계층 4 TCP/UDP 네트워크 로드 밸런서(NLB)를 작성하는 데 사용할 수 있는 네 개의 포터블 공인 IP 주소 및 네 개의 사설 IP 주소로 프로비저닝됩니다. 앱이 요구하는 포트를 노출하여 NLB를 사용자 정의할 수 있습니다. NLB에 지정된 포터블 공인 및 사설 IP 주소는 영구적이며, 클러스터에서 작업자 노드가 다시 작성될 때 변경되지 않습니다. 공용 NLB를 작성하는 경우 DNS 항목에 공용 NLB IP 주소를 등록하는 앱의 하위 도메인을 작성할 수 있습니다. 또한 각 하위 도메인에 대해 NLB IP에 대한 상태 검사 모니터를 사용으로 설정할 수도 있습니다.
  • VPC 클러스터: VPC의 로드 밸런서. 클러스터에서 앱에 대한 Kubernetes LoadBalancer 서비스를 작성하면 클러스터 외부의 VPC에 계층 7 VPC 로드 밸런서가 자동으로 작성됩니다. VPC 로드 밸런서는 다중 구역이며 작업자 노드에서 자동으로 열리는 사설 NodePort를 통해 앱에 대한 요청을 라우팅합니다. 기본적으로 로드 밸런서는 앱에 액세스하는 데 사용할 수 있는 호스트 이름으로도 작성되지만, DNS 항목을 작성하는 앱의 하위 도메인을 사용자가 작성할 수도 있습니다.
Ingress

Ingress 를 사용하여 Red Hat OpenShift Ingress 제어기를 통해 외부 트래픽에 앱을 노출할 수 있습니다. Red Hat OpenShift Controller Manager는 Ingress 리소스를 라우트 리소스로 변환하며 Red Hat OpenShift Ingress 제어기가 해당 라우트를 처리합니다.

로드 밸런싱 솔루션 선택

Red Hat OpenShift 클러스터의 앱을 노출하는 데 사용할 수 있는 옵션을 파악했으므로 사용 중인 워크로드에 가장 적합한 솔루션을 선택하십시오.

다음 표는 각 앱 노출 방법의 기능을 비교합니다.

클러스터 Red Hat OpenShift 내 애플리케이션의 외부 네트워킹 비교.
특성 NodePort LoadBalancer(클래식 - NLB) LoadBalancer(VPC 로드 밸런서) Ingress 제어기
고정 외부 IP
외부 호스트 이름
SSL 종료 예 * 예 *
HTTP(S) 로드 밸런싱
사용자 정의 라우팅 규칙
경로 또는 서비스당 여러 개의 앱
일관된 하이브리드 다중 클라우드 배치

* SSL 종료는 ibmcloud oc nlb-dns 명령으로 제공됩니다. 클래식 클러스터에서 이러한 명령은 공용 NLB에만 지원됩니다.

공용 외부 로드 밸런싱 계획

인터넷에 공용으로 클러스터의 앱을 노출하십시오.

클래식 클러스터에서는 워커 노드가 공용 VLAN에 연결됩니다. 공용 VLAN은 각 작업자 노드에 지정된 공인 IP 주소를 판별하며, 이는 각 작업자 노드에 공용 네트워크 인터페이스를 제공합니다. 공용 네트워킹 서비스는 공인 IP 주소 및 공용 URL(선택사항)로 앱을 제공하여 이 공용 네트워크 인터페이스에 연결합니다.

VPC 클러스터에서 작업자 노드는 사설 VPC 서브넷에만 연결됩니다. 그러나 공용 네트워킹 서비스를 작성할 때 VPC 로드 밸런서가 자동으로 작성됩니다. VPC 로드 밸런서는 앱에 공용 URL을 제공하여 앱에 대한 공용 요청을 라우팅할 수 있습니다. 앱이 공용으로 노출되면, 공용 URL을 갖고 있는 사용자는 요청을 앱에 전송할 수 있습니다.

앱이 공용으로 노출되면 공용 서비스 IP 주소 또는 사용자 앱에 맞게 설정한 URL을 갖고 있는 사용자는 요청을 앱에 전송할 수 있습니다. 이러한 이유로 가능한면 적은 앱을 노출하십시오. 외부 웹 클라이언트 또는 사용자로의 트래픽을 허용할 준비가 되면 공용으로만 앱을 노출하십시오.

작업자 노드에 대한 공용 네트워크 인터페이스는 클러스터 작성 중에 모든 작업자 노드에서 구성된 사전 정의된 Calico 네트워크 정책 설정에 의해 보호됩니다. 기본적으로, 모든 아웃바운드 네트워크 트래픽이 모든 작업자 노드에 대해 허용됩니다. 인바운드 네트워크 트래픽은 일부 포트를 제외하면 차단됩니다. 이러한 포트는 IBM이 네트워크 트래픽을 모니터하고 Kubernetes 마스터에 대한 보안 업데이트를 자동으로 설치할 수 있도록 열려 있으므로 공용 네트워킹 서비스에 대한 연결을 설정할 수 있습니다. 수정 방법을 포함하여 이러한 정책에 대한 자세한 정보는 네트워크 정책을 참조하십시오.

클래식 클러스터의 공용 앱 네트워킹

클래식 클러스터의 앱을 인터넷에서 공개적으로 사용할 수 있도록 하려면 라우트, NodePort, NLB 또는 Ingress 설정을 사용하는 앱 노출 방법을 선택하십시오. 다음 표에서는 가능한 각 방법, 사용 이유 및 설정 방법에 대해 설명합니다. 나열되는 네트워킹 서비스에 대한 기본 정보는 Kubernetes 서비스 유형 이해를 참조하십시오.

하나의 앱에 여러 앱 노출 방법을 사용할 수 없습니다.

공용 앱 노출 메소드의 특성
이름 로드 밸런싱 메소드 유스 케이스 구현
라우트 하위 도메인으로 앱을 노출하고 사용자 정의 라우팅 규칙을 사용하는 HTTP 로드 밸런싱

여러 앱을 위해 사용자 정의 라우팅 규칙 및 SSL 종료를 구현합니다. 기본 Red Hat OpenShift를 유지하려면 이 방법을 선택하십시오. 예를 들어, Red Hat OpenShift 웹 콘솔을 사용하여 라우트를 작성하고 관리할 수 있습니다.

  1. 앱에 내부 IP 주소를 할당하려면 ClusterIP ’ 서비스를 생성하세요.
  2. Red Hat OpenShift 경로를 설정합니다.
  3. 선택적 구성을 사용하여 라우팅 규칙을 사용자 정의하십시오.
NodePort 작업자의 공인 IP 주소에 앱을 노출하는 작업자 노드의 포트 짧은 시간에만 하나의 앱에 대한 공용 액세스를 테스트하거나 액세스를 제공합니다. 공용 NodePort 서비스를 작성하십시오.
NLB v1.0(+ 하위 도메인) IP 주소 또는 서브도메인으로 앱을 노출하는 기본 로드 밸런싱입니다. SSL 종료를 지원하는 IP 주소 또는 하위 도메인을 통해 하나의 앱을 공용으로 빠르게 노출합니다. 단일 또는 다중 구역 클러스터에서 공용 네트워크 로드 밸런서(NLB) 1.0을 작성하십시오. 선택적으로 하위 도메인 및 상태 검사를 등록하십시오.
NLB v2.0(+ 하위 도메인) IP 주소 또는 서브도메인으로 앱을 노출하는 DSR 로드 밸런싱입니다.

SSL 종료를 지원하는 IP 주소 또는 하위 도메인을 통해 공용으로 높은 레벨의 트래픽을 수신할 수 있는 앱을 노출합니다.

  1. 전제조건을 완료하십시오.
  2. 단일 또는 다중 구역 클러스터에서 공용 NLB 2.0을 작성하십시오.
  3. 선택적으로 하위 도메인 및 상태 검사를 등록하십시오.
Ingress 제어기 하위 도메인으로 앱을 노출하고 사용자 정의 라우팅 규칙을 사용하는 HTTP 로드 밸런싱 여러 앱을 위해 사용자 정의 라우팅 규칙 및 SSL 종료를 구현합니다. 기본 공용 Ingress 제어기에 대한 Ingress 제어기를 작성하십시오.

VPC 클러스터의 공용 앱 네트워킹

VPC 클러스터의 앱을 인터넷에서 공개적으로 사용할 수 있도록 하려면 라우트, VPC 로드 밸런서 또는 Ingress 설정을 사용하는 앱 노출 방법을 선택하십시오. 다음 표에서는 가능한 각 방법, 사용 이유 및 설정 방법에 대해 설명합니다. 나열되는 네트워킹 서비스에 대한 기본 정보는 Kubernetes 서비스 유형 이해를 참조하십시오.

하나의 앱에 여러 앱 노출 방법을 사용할 수 없습니다.

공용 앱 노출 메소드의 특성
이름 로드 밸런싱 메소드 유스 케이스 구현
라우트 하위 도메인으로 앱을 노출하고 사용자 정의 라우팅 규칙을 사용하는 HTTP 로드 밸런싱 여러 앱을 위해 사용자 정의 라우팅 규칙 및 SSL 종료를 구현합니다. 기본 Red Hat OpenShift를 유지하려면 이 방법을 선택하십시오. 예를 들어, Red Hat OpenShift 웹 콘솔을 사용하여 라우트를 작성하고 관리할 수 있습니다. 퍼블릭 클라우드 서비스 엔드포인트가 있는 클러스터에서 기본 공용 Ingress 제어기를 사용하여 라우트를 작성하거나 프라이빗 클라우드 서비스 엔드포인트만 있는 클러스터에서 사용자 정의 공용 Ingress 제어기를 사용하여 라우트를 작성하십시오.
VPC 로드 밸런서 호스트 이름으로 앱을 노출하는 기본 로드 밸런싱입니다. VPC 로드 밸런서 지정 호스트 이름을 통해 하나의 앱을 공용으로 빠르게 노출합니다. 클러스터에서 공용 LoadBalancer 서비스를 작성 하십시오. 다중 구역 VPC 로드 밸런서가 앱에 대한 LoadBalancer 서비스에 호스트 이름을 지정하는 VPC에 자동으로 작성됩니다.
Ingress 서브도메인으로 앱을 노출하고 사용자 정의 라우팅 규칙을 사용하는 HTTP(S) 로드 밸런싱입니다. 여러 앱을 위해 사용자 정의 라우팅 규칙 및 SSL 종료를 구현합니다. 공용 클라우드 서비스 엔드포인트가 있는 클러스터에서 기본 공용 Ingress 컨트롤러에 대해 Ingress 리소스를 작성하거나 개인용 클라우드 서비스 엔드포인트만 있는 클러스터에서 사용자 정의 공용 Ingress 컨트롤러에 대해 Ingress 리소스를 작성하십시오.

사설 외부 로드 밸런싱 계획

비공개로 사설 네트워크에만 클러스터의 앱을 노출하십시오.

IBM Cloud Kubernetes Service의 Kubernetes 클러스터에서 앱을 배치할 때 클러스터로서 동일한 사설 네트워크에 있는 사용자 및 서비스만 앱에 액세스할 수 있도록 설정할 수 있습니다. 사설 로드 밸런싱은 앱을 일반 사용자에게 노출하지 않고 클러스터 외부의 요청에서 앱을 사용할 수 있도록 하는 데 적합합니다. 나중에 공용 네트워크 서비스를 사용하여 앱을 공용으로 노출하기 전에 액세스, 요청 라우팅 및 기타 구성을 테스트하기 위해 사설 로드 밸런싱도 사용할 수 있습니다.

예를 들어, 앱에 대한 사설 로드 밸런서를 작성한다고 가정합니다. 이 사설 로드 밸런서는 다음에 의해 액세스될 수 있습니다.

  • 동일한 해당 클러스터의 임의의 팟(Pod)
  • 동일한 IBM Cloud 계정의 임의의 클러스터의 임의의 팟(Pod)
  • 사용자가 IBM Cloud 계정에는 없지만 여전히 회사 방화벽 뒤에 있는 경우, 로드 밸런서 IP가 작동되는 서브넷에 대한 VPN 연결을 통한 시스템
  • 사용자가 다른 IBM Cloud 계정에 있는 경우, 로드 밸런서 IP가 작동되는 서브넷에 대한 VPN 연결을 통한 시스템.
  • 클래식 클러스터에서 VRF 또는 VLAN Spanning이 사용으로 설정된 경우, 동일한 IBM Cloud 계정에서 사설 VLAN에 연결된 시스템
  • VPC 클러스터에서:
    • VPC 서브넷 간에 트래픽이 허용된 경우 동일한 VPC 내의 모든 시스템.
    • VPC 간에 트래픽이 허용된 경우 클러스터가 있는 VPC에 액세스할 수 있는 모든 시스템.

클래식 클러스터의 사설 앱 네트워킹

작업자 노드가 공용 및 사설 VLAN 둘 다에 연결되는 경우 개인용 라우트, NodePort, NLB를 작성하거나 Ingress를 설정하여 사설 네트워크에서만 앱에 액세스하도록 할 수 있습니다. 그리고 서비스에 대한 공용 트래픽을 차단하는 Calico 정책을 작성할 수 있습니다.

작업자 노드에 대한 공용 네트워크 인터페이스는 클러스터 작성 중에 모든 작업자 노드에서 구성된 사전 정의된 Calico 네트워크 정책 설정에 의해 보호됩니다. 기본적으로, 모든 아웃바운드 네트워크 트래픽이 모든 작업자 노드에 대해 허용됩니다. 인바운드 네트워크 트래픽은 일부 포트를 제외하면 차단됩니다. 이러한 포트는 IBM이 네트워크 트래픽을 모니터링하고 Kubernetes 마스터에 대한 보안 업데이트를 자동으로 설치할 수 있도록 열려 있으므로 NodePort, LoadBalancer및 Ingress 서비스에 연결을 설정할 수 있습니다.

기본 Calico 네트워크 정책은 이러한 서비스에 인바운드 공용 트래픽을 허용하므로 대신 Calico 정책을 작성하여 모든 공용 트래픽을 해당 서비스에 차단할 수 있습니다. 예를 들어, NodePort 서비스는 작업자 노드의 사설 및 공인 IP 주소 모두에서 작업자 노드의 포트를 엽니다. 포터블 사설 IP 주소를 가진 NLB 서비스는 모든 작업자 노드에서 공용 NodePort를 엽니다. 사용자는 공용 NodePort를 차단하는 Calico preDNAT 네트워크 정책을 작성해야 합니다.

사설 앱 네트워킹에 대한 다음 방법을 확인하십시오.

공용 및 사설 VLAN 설정을 위한 네트워크 배치 패턴의 특성
이름 로드 밸런싱 메소드 유스 케이스 구현
라우트 하위 도메인으로 앱을 노출하고 사용자 정의 라우팅 규칙을 사용하는 HTTP 로드 밸런싱 여러 앱을 위해 사용자 정의 라우팅 규칙 및 SSL 종료를 구현합니다. 기본 Red Hat OpenShift를 유지하려면 이 방법을 선택하십시오. 예를 들어, Red Hat OpenShift 웹 콘솔을 사용하여 라우트를 작성하고 관리할 수 있습니다.
  1. ClusterIP 서비스를 생성하여 앱에 내부 IP 주소를 할당합니다.
  2. 프라이빗 로드 밸런서에 의해 노출되는 인그레스 컨트롤러를 만듭니다.
  3. Red Hat OpenShift 경로를 설정합니다.
  4. 선택적 구성으로 라우팅 규칙을 사용자 지정하세요.
NodePort 작업자의 사설 IP 주소에 앱을 노출하는 작업자 노드의 포트 짧은 시간에만 하나의 앱에 대한 개인용 액세스를 테스트하거나 액세스를 제공합니다.
  1. NodePort 서비스를 만듭니다.
  2. NodePort 서비스는 작업자 노드의 사설 및 공인 IP 주소 모두에서 작업자 노드의 포트를 엽니다. 사용자는 Calico preDNAT 네트워크 정책을 사용하여 공용 NodePort에 대한 트래픽을 차단해야 합니다.
NLB 1.0 사설 IP 주소를 통해 앱을 노출하는 기본 로드 밸런싱 사설 IP 주소를 통해 하나의 앱을 사설 네트워크에 빠르게 노출합니다.
  1. 비공개 NLB 서비스를 생성합니다. 이동 가능한 사설 IP 주소를 가진 NLB의 경우에도 모든 워커 노드에는 공용 노드 포트가 여전히 열려 있습니다.
  2. Calico preDNAT 네트워크 정책을 작성하여 공용 NodePort에 대한 트래픽을 차단하십시오.
NLB v2.0 사설 IP 주소를 통해 앱을 노출하는 DSR 로드 밸런싱 IP 주소를 통해 사설 네트워크에 높은 레벨의 트래픽을 수신할 수 있는 앱을 노출합니다.
  1. 필수 요건을 완료하세요.
  2. 단일 또는 멀티존 클러스터에 비공개 NLB 2.0 를 만듭니다. 이동 가능한 사설 IP 주소를 가진 NLB의 경우에도 모든 워커 노드에는 공용 노드 포트가 여전히 열려 있습니다.
  3. Calico preDNAT 네트워크 정책을 작성하여 공용 NodePort에 대한 트래픽을 차단하십시오.
Ingress 하위 도메인으로 앱을 노출하고 사용자 정의 라우팅 규칙을 사용하는 HTTP 로드 밸런싱 여러 앱을 위해 사용자 정의 라우팅 규칙 및 SSL 종료를 구현합니다. Ingress를 사용하여 공개적으로 앱 노출 을 참조하십시오.

VPC 클러스터의 사설 앱 네트워킹

VPC 클러스터에서 사설 네트워크를 통해서만 앱을 사용할 수 있도록 하려면 클러스터의 서비스 엔드포인트 설정(퍼블릭 및 프라이빗 클라우드 서비스 엔드포인트 또는 프라이빗 클라우드 서비스 엔드포인트만)을 기반으로 로드 밸런싱 배치 패턴을 선택하십시오. 다음 표에서는 각 서비스 엔드포인트 설정의 가능한 앱 노출 방법, 해당 방법을 사용하는 이유, 해당 방법의 설정 방법을 설명합니다.

VPC 클러스터의 사설 네트워크 배치 패턴
이름 로드 밸런싱 메소드 유스 케이스 구현
라우트 하위 도메인으로 앱을 노출하고 사용자 정의 라우팅 규칙을 사용하는 HTTP 로드 밸런싱 여러 앱을 위해 사용자 정의 라우팅 규칙 및 SSL 종료를 구현합니다. 기본 Red Hat OpenShift를 유지하려면 이 방법을 선택하십시오. 예를 들어, Red Hat OpenShift 웹 콘솔을 사용하여 라우트를 작성하고 관리할 수 있습니다. 프라이빗 클라우드 서비스 엔드포인트만 있는 클러스터에서 기본 개인용 Ingress 제어기를 사용하여 Ingress 제어기를 작성하거나 퍼블릭 클라우드 서비스 엔드포인트가 있는 사용자 정의 개인용 Ingress 제어기를 사용하여 라우트를 작성하십시오.
NodePort 작업자의 사설 IP 주소에 앱을 노출하는 작업자 노드의 포트 짧은 시간에만 하나의 앱에 대한 개인용 액세스를 테스트하거나 액세스를 제공합니다. 사설 NodePort 서비스를 작성하십시오.
VPC 로드 밸런서 개인용 호스트 이름을 통해 앱을 노출하는 기본 로드 밸런싱 VPC 로드 밸런서 지정 개인용 호스트 이름을 통해 하나의 앱을 사설 네트워크에 빠르게 노출합니다. 클러스터에 사설 LoadBalancer 서비스를 작성하십시오. 다중 구역 VPC 로드 밸런서가 앱에 대한 LoadBalancer 서비스에 호스트 이름을 지정하는 VPC에 자동으로 작성됩니다.
Ingress 하위 도메인으로 앱을 노출하고 사용자 정의 라우팅 규칙을 사용하는 HTTP 로드 밸런싱 여러 앱을 위해 사용자 정의 라우팅 규칙 및 SSL 종료를 구현합니다. 프라이빗 클라우드 서비스 엔드포인트만 있는 클러스터에서 기본 개인용 Ingress 제어기에 대한 Ingress 리소스를 작성하거나, 퍼블릭 클라우드 서비스 엔드포인트가 있는 클러스터에서 사용자 정의 개인용 Ingress 제어기에 대한 Ingress 리소스를 작성하십시오.