Ingress에 대한 정보

Ingress는 공용 또는 개인용 요청을 앱에 전달함으로써 클러스터 내 네트워크 트래픽 워크로드의 균형을 유지하는 서비스입니다. Ingress를 사용하여 고유 공용 또는 개인용 도메인을 사용함으로써 공용 또는 사설 네트워크에 여러 앱 서비스를 노출시킬 수 있습니다.

클러스터에서 Red Hat OpenShift Ingress 제어기는 HAProxy Ingress 제어기를 구현하는 계층 7 로드 밸런서입니다. 계층 4 LoadBalancer 서비스는 Ingress 제어기가 클러스터에 들어오는 외부 요청을 수신할 수 있도록 Ingress 제어기를 노출합니다. 그런 다음, Ingress 제어기는 헤더와 같은 구별되는 계층 7 프로토콜 특성을 기반으로 클러스터의 앱 팟(pod)으로 요청을 전달합니다.

Ingress의 컴포넌트는 무엇입니까?

Red Hat OpenShift 버전 4를 실행하는 클러스터에서 Ingress는 세 개의 컴포넌트(Ingress 오퍼레이터, Ingress 제어기 및 라우트 리소스)로 구성됩니다.

Ingress 오퍼레이터

Ingress Red Hat OpenShift 오퍼레이터 는 클러스터 내 애플리케이션으로 들어오는 모든 트래픽에 적용되는 라우팅 규칙을 구현합니다.

Ingress 제어기는 Ingress 오퍼레이터가 관리합니다. 클러스터 작성 중에 기본 Ingress 제어기는 <cluster_name>-<globally_unique_account_HASH>-0000.<region>.containers.appdomain.cloud 형식으로 클러스터의 기본 Ingress 하위 도메인에 등록됩니다. 라우트 리소스를 작성하여 앱을 이 하위 도메인에 등록하는 경우 Ingress 제어기는 이 하위 도메인을 통해 앱에 대한 요청이 앱 팟(Pod)에 올바르게 프록시되는지 확인합니다. 클러스터에서 기본 Ingress 제어기를 확인하려면 oc describe ingresscontroller/default -n openshift-ingress-operator를 실행하십시오.

앱을 다른 도메인에 등록할 경우, 대신해서 사용자 정의 도메인에 대한 라우팅 규칙을 구현하는 사용자 정의 Ingress 제어기를 작성할 수 있습니다.

Ingress 제어기

하나의 HAProxy기반 Red Hat OpenShift Ingress 제어기가 각 IngressController에 대해 작성되고 작업자 노드가 있는 각 구역에 하나의 Ingress 제어기 서비스가 작성됩니다.

Ingress 오퍼레이터는 IngressController에 지정된 것과 동일한 도메인으로 Ingress 제어기를 구성합니다. Ingress 제어기는 해당 도메인을 통해 수신 HTTP, HTTPS 또는 TCP 서비스 요청을 청취합니다. Ingress 제어기의 로드 밸런서 서비스 컴포넌트는 라우트 리소스에 정의되고 Ingress 제어기로 구현되는 규칙에 따라서만 해당 앱에 대한 요청을 팟(Pod)에 전달합니다.

다중 구역 클러스터가 있는 경우에는 하나의 고가용성 라우터가 클러스터에 배치되고 다중 구역 VPC 로드 밸런서를 사용하여 구성됩니다. Ingress 제어기의 두 복제본이 올바르게 배치되고 업데이트될 수 있도록 구역당 두 개의 작업자 노드가 필요합니다.

Ingress 제어기를 수동으로 작성하는 경우 Ingress 제어기는 클러스터의 앱 또는 Ingress 하위 도메인에 자동으로 등록되지 않습니다.

일반 클러스터: Ingress 컨트롤러 IP 주소

기본 Ingress 제어기 서비스의 IP 주소를 찾으려면 oc get svc -n openshift-ingress를 실행하고 외부 IP 필드를 찾으십시오. 다중 구역 클러스터가 있는 경우 작업자 노드가 있는 첫 번째 구역의 Ingress 제어기 서비스는 항상 router-default로 이름이 지정되고, 이후에 클러스터에 추가하는 구역의 Ingress 제어기 서비스는 router-dal12와 같은 이름을 갖습니다.

VPC 클러스터: Ingress 컨트롤러 호스트 이름

VPC 클러스터를 작성하면 공용 다중 구역 VPC 로드 밸런서와 사설 다중 구역 VPC 로드 밸런서가 각각 하나씩 VPC의 클러스터 외부에 자동으로 작성됩니다. 공용 VPC 로드 밸런서는 공용 Ingress 제어기를 등록하기 위한 호스트 이름을 작성하고 사설 VPC 로드 밸런서는 개인용 Ingress 제어기를 등록하기 위한 호스트 이름을 작성합니다. VPC 클러스터에서는 외부 IP 주소가 정적 주소가 아니며 시간 경과에 따라 변경될 수 있으므로 Ingress 제어기에 호스트 이름이 지정됩니다. 이 Ingress 제어기 호스트 이름은 클러스터의 기본 Ingress 하위 도메인과는 다른 것임을 참고하십시오.

클러스터의 Ingress 하위 도메인은 공용 Ingress 제어기의 VPC 로드 밸런서 호스트 이름에 자동으로 링크됩니다. <cluster_name>.<hash>-0000.<region>.containers.appdomain.cloud와 같은 클러스터의 Ingress 하위 도메인은 01ab23cd-<region>.lb.appdomain.cloud와 같은 공용 Ingress 제어기의 VPC 로드 밸런서 지정 호스트 이름과 다르다는 점을 참고하십시오. Ingress 하위 도메인은 사용자가 인터넷에서 앱에 액세스하는 데 사용하는 공용 라우트이며, TLS 종료를 사용하도록 구성할 수 있습니다. 공용 Ingress 제어기에 대해 지정된 호스트 이름은 VPC 로드 밸런서가 트래픽을 Ingress 제어기 서비스에 전달하는 데 사용합니다.

oc get svc -n openshift-ingress를 실행하고 EXTERNAL IP 필드를 찾아 공용 Ingress 제어기에 지정된 호스트 이름 및 개인용 Ingress 제어기에 지정된 호스트 이름을 찾을 수 있습니다.

이러한 작업자 노드는 VPC 로드 밸런서의 리스너로 구성되므로, VPC 인프라 대시보드에서 VPC 로드 밸런서는 Ingress 제어기 복제본 팟(Pod)을 실행하는 두 개의 작업자 노드만 정상으로 보고합니다. 리스너 작업자 노드만 정상으로 보고되지만, 클러스터의 모든 작업자 노드가 VPC 로드 밸런서로부터 요청을 계속 수신할 수 있도록 작업자 노드의 리스너 백엔드 풀이 Red Hat OpenShift on IBM Cloud에서 최신 상태로 유지됩니다.

라우트 리소스

라우트를 사용하여 앱을 노출시키려면 앱에 대한 Kubernetes 서비스를 작성하고 라우트 리소스를 정의하여 Ingress 제어기에 이 서비스를 등록해야 합니다. Ingress 리소스는 앱에 대한 수신 요청을 라우팅하는 방법의 규칙을 정의하는 Red Hat OpenShift 리소스입니다.

Route 리소스는 앱 서비스에 대한 경로도 지정합니다. 앱 서비스에 대한 경로가 클러스터의 Ingress 하위 도메인에 추가되어 고유 앱 URL을 구성합니다(예: mycluster-a1b2cdef345678g9hi012j3kl4567890-0000.us-south.containers.appdomain.cloud/myapp1).

노출하려는 앱이 있는 프로젝트마다 하나의 라우트 리소스가 필요합니다.

  • 클러스터의 앱이 모두 동일한 프로젝트에 있는 경우 노출할 앱에 대한 라우팅 규칙을 정의하려면 하나의 라우트 리소스를 작성해야 합니다. 동일한 프로젝트 내에서 앱에 다른 도메인을 사용할 경우 도메인당 하나의 리소스를 작성할 수 있습니다.
  • 클러스터의 앱이 여러 프로젝트에 있는 경우 앱의 라우팅 규칙을 정의하려면 프로젝트마다 하나의 라우트 리소스를 작성해야 합니다.

자세한 정보는 단일 또는 다중 프로젝트에 대한 네트워킹 계획을 참조하십시오.

앱에 대한 라우팅 규칙을 사용자 정의하려는 경우에는 앱에 대한 트래픽을 관리하는 라우트별 HAProxy 어노테이션을 사용할 수 있습니다. 이러한 지원되는 어노테이션의 형식은 haproxy.router.openshift.io/<annotation> 또는 router.openshift.io/<annotation>입니다. IBM Cloud Kubernetes Service 어노테이션(ingress.bluemix.net/<annotation>) 및 NGINX 어노테이션(nginx.ingress.kubernetes.io/<annotation>)은 Red Hat OpenShift 버전 4의 Ingress 제어기 또는 라우트 리소스에 대해 지원되지 않습니다.

클래식 클러스터에서 요청이 내 앱에 도달하는 방법은 무엇입니까?

단일 구역 클러스터

다음 다이어그램은 Ingress가 인터넷에서 클래식 단일 구역 클러스터의 앱으로 통신을 지정하는 방법을 보여줍니다.

![](/images/roks_router_ingress_single.svg "사용하여 단일 영역 클러스터에 앱 노출Ingress*를 사용하여 단일 영역 클러스터에 앱 " caption-side="bottom"} 사용하여 단일 영역 클러스터에 앱 "){: caption="

  1. 사용자는 앱의 URL에 액세스하여 요청을 앱에 전송합니다. 이 URL은 Ingress 리소스 경로가 추가된, 노출된 앱에 대한 클러스터의 Ingress 하위 도메인입니다(예: mycluster-<hash>-0000.us-south.containers.appdomain.cloud/myapp).

  2. DNS 시스템 서비스는 URL의 하위 도메인을 클러스터에서 Ingress 제어기를 노출하는 로드 밸런서의 포터블 공인 IP 주소로 해석합니다.

  3. 클라이언트가 해석된 IP 주소를 기반으로 하여 Ingress 제어기 서비스에 요청을 전송합니다.

  4. Ingress 제어기가 Ingress 제어기로 구현되는 라우팅 규칙에서 myapp 경로에 대한 라우팅 규칙을 확인합니다. 일치하는 규칙이 발견된 경우에는 Ingress 제어기에서 정의한 규칙 및 라우트 리소스에 따라 앱이 배치된 팟(Pod)으로 요청이 프록시됩니다. 패킷의 소스 IP 주소는 Ingress 제어기 팟(Pod)이 실행되는 작업자 노드의 IP 주소로 변경됩니다. 여러 앱 인스턴스가 클러스터에 배치된 경우 Ingress 제어기가 앱 팟(Pod) 간에 요청을 로드 밸런싱합니다.

  5. 앱이 응답 패킷을 리턴하는 경우 요청을 전달한 Ingress 제어기가 있는 작업자 노드의 IP 주소를 사용합니다. 그러면 Ingress 제어기가 응답 패킷을 클라이언트에 전송합니다.

다중 구역 클러스터

다음 다이어그램은 Ingress가 인터넷에서 클래식 다중 구역 클러스터의 앱으로 통신을 지정하는 방법을 보여줍니다.

![](/images/roks_router_ingress_multizone.svg "사용하여 멀티존 클러스터에 앱 노출Ingress*를 사용하여 멀티존 클러스터에 앱 " caption-side="bottom"} 사용하여 멀티존 클러스터에 앱 "){: caption="

  1. 사용자는 앱의 URL에 액세스하여 요청을 앱에 전송합니다. 이 URL은 Ingress 리소스 경로가 추가된, 노출된 앱에 대한 클러스터의 Ingress 하위 도메인입니다(예: mycluster-<hash>-0000.us-south.containers.appdomain.cloud/myapp).

  2. DNS 시스템 서비스는 라우트 하위 도메인을 MZLB에서 정상으로 보고된 Ingress 제어기 서비스의 부동 공인 IP 주소로 해석합니다. MZLB는 클러스터의 각 구역에서 Ingress 제어기를 노출하는 서비스의 포터블 공인 IP 주소를 지속적으로 확인합니다. 다양한 구역에서 Ingress 제어기 서비스가 라운드 로빈 주기로 요청을 처리합니다.

  3. 클라이언트가 Ingress 제어기를 노출하는 서비스의 IP 주소로 요청을 전송합니다.

  4. Ingress 제어기가 Ingress 제어기로 구현되는 myapp 경로에 대한 라우팅 규칙을 확인합니다. 일치하는 규칙이 발견된 경우에는 IngressController에서 정의한 규칙 및 라우트 리소스에 따라 앱이 배치된 팟(Pod)으로 요청이 프록시됩니다. 패킷의 소스 IP 주소는 Ingress 제어기 팟(Pod)이 실행되는 작업자 노드의 IP 주소로 변경됩니다. 여러 앱 인스턴스가 클러스터에 배치된 경우 Ingress 제어기 서비스가 모든 구역의 앱 팟(Pod) 간에 요청을 전송합니다.

  5. 앱이 응답 패킷을 리턴할 때 요청을 전달한 Ingress 제어기 서비스가 있는 작업자 노드의 IP 주소를 사용합니다. 그러면 Ingress 제어기가 응답 패킷을 클라이언트에 전송합니다.

VPC 클러스터에서 요청이 내 앱에 도달하는 방법은 무엇입니까?

퍼블릭 클라우드 서비스 엔드포인트가 있는 VPC 클러스터

퍼블릭 클라우드 서비스 엔드포인트가 사용으로 설정된 다중 구역 VPC 클러스터를 작성하면 공용 Ingress 제어기가 기본적으로 작성됩니다. 다음 다이어그램은 Ingress가 인터넷에서 VPC 다중 구역 클러스터의 앱으로 통신을 지정하는 방법을 보여줍니다.

![](images/roks_router_ingress_vpc.svg "사용하여 멀티존 VPC 클러스터에서 앱을 공개적으로 노출하기Ingress*를 사용하여 멀티존 VPC 클러스터에서 앱을 공개적으로 " caption-side="bottom"} 사용하여 멀티존 VPC 클러스터에서 앱을 "){: caption="노출하기

  1. 사용자는 앱의 URL에 액세스하여 요청을 앱에 전송합니다. 이 URL은 노출된 앱의 Ingress 리소스 경로가 추가된 클러스터의 Ingress 하위 도메인입니다(예: mycluster-<hash>-0000.us-south.containers.appdomain.cloud/myapp).

  2. DNS 서비스가 라우트 하위 도메인을 Ingress 제어기에 지정된 VPC 로드 밸런서 호스트 이름으로 해석합니다. VPC 클러스터에서, 외부 IP 주소는 유동 IP 주소이며 VPC 지정 호스트 이름으로 숨겨집니다.

  3. VPC 로드 밸런서는 VPC 호스트 이름을 정상으로 보고된 Ingress 제어기의 구역에서 사용 가능한 IP 주소로 해석합니다. VPC 로드 밸런서는 클러스터의 각 구역에서 Ingress 제어기의 외부 IP 주소를 지속적으로 확인합니다.

  4. VPC 로드 밸런서가 해석된 IP 주소를 기반으로 Ingress 제어기에 요청을 전송합니다.

  5. Ingress 제어기가 Ingress 제어기로 구현되는 myapp 경로에 대한 라우팅 규칙을 확인합니다. 일치하는 규칙이 발견된 경우에는 IngressController에서 정의한 규칙 및 라우트 리소스에 따라 앱이 배치된 팟(Pod)으로 요청이 프록시됩니다. 패킷의 소스 IP 주소는 Ingress 제어기 팟(Pod)이 실행되는 작업자 노드의 IP 주소로 변경됩니다. 여러 앱 인스턴스가 클러스터에 배치된 경우 Ingress 제어기가 모든 구역의 앱 팟(Pod) 간에 요청을 로드 밸런싱합니다.

  6. 앱이 응답 패킷을 리턴할 때 요청을 전달한 Ingress 제어기 서비스가 있는 작업자 노드의 IP 주소를 사용합니다. 그 후 VPC 로드 밸런서가 응답 패킷을 클라이언트에 전송합니다.

프라이빗 클라우드 서비스 엔드포인트만 있는 VPC 클러스터

프라이빗 클라우드 서비스 엔드포인트만으로 다중 구역 VPC 클러스터를 작성하는 경우 기본적으로 개인용 Ingress 제어기가 작성됩니다. 사설 VPC 네트워크에 연결된 클라이언트만 개인용 Ingress 제어기에 의해 노출된 앱에 액세스할 수 있습니다. 다음 다이어그램은 Ingress가 사설 네트워크에서 VPC 다중 구역 클러스터의 앱으로 통신을 지정하는 방법을 보여줍니다.

사용하여 멀티존 VPC 클러스터에서 앱을 비공개로
사용하여 멀티존 VPC 클러스터에서 앱을 비공개로 노출하기

  1. 사설 VPC 네트워크에 연결된 클라이언트는 앱의 URL을 사용하여 요청을 앱에 전송합니다. 이 URL은 노출된 앱의 Ingress 리소스 경로가 추가된 클러스터의 Ingress 하위 도메인입니다(예: mycluster-<hash>-0000.us-south.containers.appdomain.cloud/myapp). 예를 들어, 가상 프라이빗 클라우드 VPN인 IBM Cloud Transit Gateway 또는 IBM Cloud Direct Link를 사용하여 온프레미스 네트워크, 다른 VPC 또는 IBM Cloud 클래식 인프라부터 클러스터에서 실행되는 앱까지의 요청을 허용할 수 있습니다.

  2. DNS 서비스가 라우트 하위 도메인을 Ingress 제어기에 대한 서비스에 지정된 VPC 로드 밸런서 호스트 이름으로 해석합니다. VPC 클러스터에서 Ingress 제어기 서비스의 사설 IP 주소는 유동적이며 VPC 지정 호스트 이름으로 숨겨집니다. 라우트 하위 도메인에 대한 DNS가 공용 DNS 시스템에 등록되어 있지만 VPC에서 DNS 분석 서버에 연결할 수 있습니다.

  3. 사설 VPC 로드 밸런서가 VPC 호스트 이름을 정상으로 보고된 Ingress 제어기 서비스의 사용 가능한 사설 IP 주소로 해석합니다. VPC 로드 밸런서는 클러스터의 각 구역에서 Ingress 제어기를 노출하는 서비스의 IP 주소를 지속적으로 확인합니다.

  4. VPC 로드 밸런서가 해석된 IP 주소를 기반으로 Ingress 제어기 서비스에 요청을 전송합니다.

  5. Ingress 제어기가 Ingress 제어기로 구현되는 myapp 경로에 대한 라우팅 규칙을 확인합니다. 일치하는 규칙이 발견된 경우에는 IngressController에서 정의한 규칙 및 라우트 리소스에 따라 앱이 배치된 팟(Pod)으로 요청이 프록시됩니다. 패킷의 소스 IP 주소는 Ingress 제어기 팟(Pod)이 실행되는 작업자 노드의 IP 주소로 변경됩니다. 여러 앱 인스턴스가 클러스터에 배치된 경우 Ingress 제어기가 모든 구역의 앱 팟(Pod) 간에 요청을 로드 밸런싱합니다.

  6. 앱이 응답 패킷을 리턴할 때 클라이언트 요청을 전달한 Ingress 제어기가 있는 작업자 노드의 IP 주소를 사용합니다. 그런 다음 Ingress 제어기가 VPC 로드 밸런서를 통해 응답 패킷을 클라이언트에 전송합니다.

라우팅을 사용자 정의하는 방법은 무엇입니까?

앱에 대한 라우팅 규칙을 사용자 정의하려는 경우에는 앱에 대한 트래픽을 관리하는 라우트별 HAProxy 어노테이션을 사용할 수 있습니다.

이러한 지원되는 어노테이션의 형식은 haproxy.router.openshift.io/<annotation> 또는 router.openshift.io/<annotation>입니다.

IBM Cloud Kubernetes Service 어노테이션(ingress.bluemix.net/<annotation>) 및 NGINX 어노테이션(nginx.ingress.kubernetes.io/<annotation>)은 Red Hat OpenShift 버전 4의 Ingress 제어기 또는 라우트 리소스에 대해 지원되지 않습니다.

시작하려면 Ingress 사용자 정의 를 참조하십시오.

TLS 인증서를 사용으로 설정하는 방법은 무엇입니까?

수신 HTTPS 연결을 하위 도메인으로 로드 밸런싱하려면 네트워크 트래픽을 복호화하고 클러스터에 노출된 앱으로 복호화된 요청을 전달하도록 Ingress 제어기를 구성할 수 있습니다.

공용 Ingress 제어기를 구성할 때는 앱에 액세스할 수 있는 도메인을 선택합니다. IBM 제공 도메인(예: mycluster-<hash>-0000.us-south.containers.appdomain.cloud/myapp)을 사용하는 경우 Ingress 하위 도메인에 대해 작성된 기본 TLS 인증서를 사용할 수 있습니다. 사용자 정의 도메인을 IBM 제공 도메인을 맵핑하도록 CNAME 레코드를 설정하는 경우, 사용자 정의 도메인에 대한 자체 TLS 인증서를 제공할 수 있습니다.

TLS 인증서에 대한 자세한 정보는 TLS 인증서 및 시크릿 관리를 참조하십시오.