2.4. Ingress Controller 엔드포인트 게시 전략 구성


endpointPublishingStrategy 는 Ingress Controller 엔드포인트를 다른 네트워크에 게시하고, 로드 밸런서 통합을 활성화하고, 다른 시스템에 대한 액세스를 제공하는 데 사용됩니다.

중요

Red Hat OpenStack Platform(RHOSP)에서 LoadBalancerService 엔드포인트 게시 전략은 클라우드 공급자가 상태 모니터를 생성하도록 구성된 경우에만 지원됩니다. RHOSP 16.2의 경우 Amphora Octavia 공급자를 사용하는 경우에만 이 전략이 가능합니다.

자세한 내용은 RHOSP 설치 설명서의 "RHOSP Cloud Controller Manager 옵션 설정" 섹션을 참조하세요.

2.4.1. Ingress Controller 엔드포인트 게시 전략

NodePortService 끝점 게시 전략

NodePortService 끝점 게시 전략에서는 Kubernetes NodePort 서비스를 사용하여 Ingress 컨트롤러를 게시합니다.

이 구성에서는 Ingress 컨트롤러를 배포하기 위해 컨테이너 네트워킹을 사용합니다. 배포를 게시하기 위해 NodePortService가 생성됩니다. 특정 노드 포트는 OpenShift Container Platform에 의해 동적으로 할당됩니다. 그러나 정적 포트 할당을 지원하기 위해 관리형 NodePortService의 노드 포트 필드에 대한 변경 사항은 유지됩니다.

그림 2.3. NodePortService 다이어그램

위의 그래픽은 OpenShift Container Platform Ingress NodePort 엔드포인트 게시 전략과 관련된 다음 개념을 보여줍니다.

  • 클러스터 내의 모든 사용 가능한 노드는 자체적으로 외부에서 접근 가능한 IP 주소를 가지고 있습니다. 클러스터에서 실행되는 서비스는 모든 노드의 고유한 NodePort에 바인딩됩니다.
  • 예를 들어, 클라이언트가 다운된 노드에 연결하는 경우(그래픽의 IP 주소 10.0.128.4) 노드 포트는 클라이언트를 서비스를 실행 중인 사용 가능한 노드에 직접 연결합니다. 이 시나리오에서는 부하 분산이 필요하지 않습니다. 그림에서 볼 수 있듯이 10.0.128.4 주소는 다운되었으며 대신 다른 IP 주소를 사용해야 합니다.
참고

Ingress Operator는 서비스의 .spec.ports[].nodePort 필드에 대한 업데이트를 무시합니다.

기본적으로 포트는 자동으로 할당되며 통합을 위해 포트 할당에 액세스할 수 있습니다. 그러나 동적 포트에 대한 응답으로 쉽게 재구성할 수 없는 기존 인프라와 통합하기 위해 정적 포트 할당이 필요한 경우가 있습니다. 정적 노드 포트와 통합하기 위해 관리 서비스 리소스를 직접 업데이트할 수 있습니다.

자세한 내용은 NodePort에 대한 Kubernetes 서비스 설명서를 참조하십시오.

HostNetwork 끝점 게시 전략

HostNetwork 끝점 게시 전략에서는 Ingress 컨트롤러가 배포된 노드 포트에 Ingress 컨트롤러를 게시합니다.

HostNetwork 엔드포인트 게시 전략을 사용하는 Ingress Controller는 노드당 하나의 Pod 복제본만 가질 수 있습니다. n개의 복제본이 필요한 경우에는 해당 복제본을 예약할 수 있는 n개 이상의 노드를 사용해야 합니다. 각 pod 복제본은 예약된 노드 호스트에서 포트 80443을 요청하므로 동일한 노드의 다른 pod가 해당 포트를 사용하는 경우 복제본을 노드에 예약할 수 없습니다.

HostNetwork 개체에는 선택적 바인딩 포트에 대한 다음 기본값을 갖는 hostNetwork 필드가 있습니다. httpPort: 80 , httpsPort: 443 , statsPort: 1936 . 네트워크에 대해 서로 다른 바인딩 포트를 지정하면 HostNetwork 전략에 대해 동일한 노드에 여러 Ingress 컨트롤러를 배포할 수 있습니다.

apiVersion: operator.openshift.io/v1
kind: IngressController
metadata:
  name: internal
  namespace: openshift-ingress-operator
spec:
  domain: example.com
  endpointPublishingStrategy:
    type: HostNetwork
    hostNetwork:
      httpPort: 80
      httpsPort: 443
      statsPort: 1936
Copy to Clipboard Toggle word wrap

2.4.1.1. Ingress 컨트롤러 끝점에서 내부로 게시 범위 구성

클러스터 관리자가 클러스터를 비공개로 지정하지 않고 새 클러스터를 설치하는 경우 기본 Ingress 컨트롤러가 생성되고 범위는 External 로 설정됩니다. 클러스터 관리자는 외부 범위의 Ingress 컨트롤러를 내부 범위 로 변경할 수 있습니다.

사전 요구 사항

  • oc CLI를 설치했습니다.

프로세스

  • 외부 범위의 Ingress 컨트롤러를 내부 범위 로 변경하려면 다음 명령을 입력하세요.

    $ oc -n openshift-ingress-operator patch ingresscontrollers/default --type=merge --patch='{"spec":{"endpointPublishingStrategy":{"type":"LoadBalancerService","loadBalancer":{"scope":"Internal"}}}}'
    Copy to Clipboard Toggle word wrap
  • Ingress Controller의 상태를 확인하려면 다음 명령을 입력하세요.

    $ oc -n openshift-ingress-operator get ingresscontrollers/default -o yaml
    Copy to Clipboard Toggle word wrap
    • 진행 상태 조건은 추가 조치를 취해야 하는지 여부를 나타냅니다. 예를 들어, 상태 조건은 다음 명령을 입력하여 서비스를 삭제해야 함을 나타낼 수 있습니다.

      $ oc -n openshift-ingress delete services/router-default
      Copy to Clipboard Toggle word wrap

      서비스를 삭제하면 Ingress Operator에서 해당 서비스를 Internal 로 다시 생성합니다.

2.4.1.2. Ingress Controller 엔드포인트 게시 범위를 외부로 구성

클러스터 관리자가 클러스터를 비공개로 지정하지 않고 새 클러스터를 설치하는 경우 기본 Ingress 컨트롤러가 생성되고 범위는 External 로 설정됩니다.

Ingress Controller의 범위는 설치 중 또는 설치 후에 내부 로 구성할 수 있으며, 클러스터 관리자는 내부 Ingress Controller를 외부 로 변경할 수 있습니다.

중요

일부 플랫폼에서는 서비스를 삭제하고 다시 만들어야 합니다.

범위를 변경하면 Ingress 트래픽이 몇 분 동안 중단될 수 있습니다. 이는 서비스를 삭제하고 다시 만들어야 하는 플랫폼에 적용되는데, 이 절차를 수행하면 OpenShift Container Platform에서 기존 서비스 로드 밸런서의 프로비저닝을 해제하고, 새 로드 밸런서를 프로비저닝하고, DNS를 업데이트해야 할 수 있기 때문입니다.

사전 요구 사항

  • oc CLI를 설치했습니다.

프로세스

  • 내부 범위의 Ingress 컨트롤러를 외부 범위 로 변경하려면 다음 명령을 입력하세요.

    $ oc -n openshift-ingress-operator patch ingresscontrollers/private --type=merge --patch='{"spec":{"endpointPublishingStrategy":{"type":"LoadBalancerService","loadBalancer":{"scope":"External"}}}}'
    Copy to Clipboard Toggle word wrap
  • Ingress Controller의 상태를 확인하려면 다음 명령을 입력하세요.

    $ oc -n openshift-ingress-operator get ingresscontrollers/default -o yaml
    Copy to Clipboard Toggle word wrap
    • 진행 상태 조건은 추가 조치를 취해야 하는지 여부를 나타냅니다. 예를 들어, 상태 조건은 다음 명령을 입력하여 서비스를 삭제해야 함을 나타낼 수 있습니다.

      $ oc -n openshift-ingress delete services/router-default
      Copy to Clipboard Toggle word wrap

      서비스를 삭제하면 Ingress Operator가 해당 서비스를 External 로 다시 생성합니다.

2.4.1.3. Ingress Controller에 단일 NodePort 서비스 추가

각 프로젝트에 대해 NodePort 유형 서비스를 만드는 대신, NodePortService 엔드포인트 게시 전략을 사용하기 위해 사용자 정의 Ingress 컨트롤러를 만들 수 있습니다. 포트 충돌을 방지하려면 이미 HostNetwork Ingress Controller가 있는 노드에 Ingress 샤딩을 통해 일련의 경로를 적용하려는 경우 Ingress Controller에 대해 이 구성을 고려하세요.

각 프로젝트에 대해 NodePort 유형 서비스를 설정하기 전에 다음 고려 사항을 읽어보세요.

  • Nodeport Ingress Controller 도메인에 대한 와일드카드 DNS 레코드를 만들어야 합니다. Nodeport Ingress Controller 경로는 워커 노드의 주소에서 접근할 수 있습니다. 경로에 필요한 DNS 레코드에 대한 자세한 내용은 "사용자 제공 DNS 요구 사항"을 참조하세요.
  • 서비스에 대한 경로를 공개하고 사용자 지정 Ingress Controller 도메인에 대한 --hostname 인수를 지정해야 합니다.
  • 애플리케이션 포드에 액세스할 수 있도록 경로에 NodePort 유형 서비스 에 할당된 포트를 추가해야 합니다.

사전 요구 사항

  • OpenShift CLI(oc)를 설치합니다.
  • 클러스터 관리자 권한이 있는 사용자로 로그인했습니다.
  • 와일드카드 DNS 레코드를 생성했습니다.

프로세스

  1. Ingress Controller에 대한 사용자 정의 리소스(CR) 파일을 만듭니다.

    IngressController 객체에 대한 정보를 정의하는 CR 파일의 예

    apiVersion: v1
    items:
    - apiVersion: operator.openshift.io/v1
      kind: IngressController
      metadata:
        name: <custom_ic_name> 
    1
    
        namespace: openshift-ingress-operator
      spec:
        replicas: 1
        domain: <custom_ic_domain_name> 
    2
    
        nodePlacement:
          nodeSelector:
            matchLabels:
              <key>: <value> 
    3
    
        namespaceSelector:
         matchLabels:
           <key>: <value> 
    4
    
        endpointPublishingStrategy:
          type: NodePortService
    # ...
    Copy to Clipboard Toggle word wrap

    1
    IngressController CR에 사용자 정의 이름을 지정합니다.
    2
    Ingress Controller가 서비스하는 DNS 이름입니다. 예를 들어, 기본 ingresscontroller 도메인은 apps.ipi-cluster.example.com 이므로 <custom_ic_domain_name>을 nodeportsvc.ipi-cluster.example.com 으로 지정합니다.
    3
    사용자 정의 Ingress 컨트롤러를 포함하는 노드에 대한 레이블을 지정합니다.
    4
    네임스페이스 집합에 대한 레이블을 지정합니다. <키>:<값>을 키-값 쌍의 맵으로 대체합니다. 여기서 <키> 는 새 레이블의 고유한 이름이고 <값> 은 해당 값입니다. 예를 들어: ingresscontroller: custom-ic .
  2. oc label node 명령을 사용하여 노드에 레이블을 추가합니다.

    $ oc label node <node_name> <key>=<value> 
    1
    Copy to Clipboard Toggle word wrap
    1
    <value>IngressController CR의 nodePlacement 섹션에 지정된 키-값 쌍과 일치해야 합니다.
  3. IngressController 객체를 생성합니다.

    $ oc create -f <ingress_controller_cr>.yaml
    Copy to Clipboard Toggle word wrap
  4. IngressController CR에 대해 생성된 서비스의 포트를 찾으세요.

    $ oc get svc -n openshift-ingress
    Copy to Clipboard Toggle word wrap

    router-nodeport-custom-ic3 서비스에 대한 포트 80:32432/TCP를 표시하는 예제 출력

    NAME                        TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                                     AGE
    router-internal-default      ClusterIP   172.30.195.74    <none>        80/TCP,443/TCP,1936/TCP                     223d
    router-nodeport-custom-ic3   NodePort    172.30.109.219   <none>        80:32432/TCP,443:31366/TCP,1936:30499/TCP   155m
    Copy to Clipboard Toggle word wrap

  5. 새 프로젝트를 생성하려면 다음 명령을 입력합니다.

    $ oc new-project <project_name>
    Copy to Clipboard Toggle word wrap
  6. 새 네임스페이스에 레이블을 지정하려면 다음 명령을 입력하세요.

    $ oc label namespace <project_name> <key>=<value> 
    1
    Copy to Clipboard Toggle word wrap
    1
    <키>=<값> 은 Ingress Controller CR의 namespaceSelector 섹션에 있는 값과 일치해야 합니다.
  7. 클러스터에 새 애플리케이션을 만듭니다.

    $ oc new-app --image=<image_name> 
    1
    Copy to Clipboard Toggle word wrap
    1
    <image_name> 의 예는 quay.io/openshifttest/hello-openshift:multiarch 입니다.
  8. 서비스에 대한 Route 객체를 생성하면 Pod가 서비스를 사용하여 클러스터 외부에 애플리케이션을 노출할 수 있습니다.

    $ oc expose svc/<service_name> --hostname=<svc_name>-<project_name>.<custom_ic_domain_name> 
    1
    Copy to Clipboard Toggle word wrap
    참고

    --hostname 인수에서 사용자 지정 Ingress 컨트롤러의 도메인 이름을 지정해야 합니다. 이렇게 하지 않으면 Ingress Operator는 기본 Ingress Controller를 사용하여 클러스터의 모든 경로를 처리합니다.

  9. 경로가 승인됨 상태인지 확인하고 사용자 지정 Ingress 컨트롤러에 대한 메타데이터가 포함되어 있는지 확인하세요.

    $ oc get route/hello-openshift -o json | jq '.status.ingress'
    Copy to Clipboard Toggle word wrap

    출력 예

    # ...
    {
      "conditions": [
        {
          "lastTransitionTime": "2024-05-17T18:25:41Z",
          "status": "True",
          "type": "Admitted"
        }
      ],
      [
        {
          "host": "hello-openshift.nodeportsvc.ipi-cluster.example.com",
          "routerCanonicalHostname": "router-nodeportsvc.nodeportsvc.ipi-cluster.example.com",
          "routerName": "nodeportsvc", "wildcardPolicy": "None"
        }
      ],
    }
    Copy to Clipboard Toggle word wrap

  10. 기본 IngressController CR을 업데이트하여 기본 Ingress Controller가 NodePort 유형 서비스를 관리하지 못하도록 합니다. 기본 Ingress Controller는 다른 모든 클러스터 트래픽을 계속 모니터링합니다.

    $ oc patch --type=merge -n openshift-ingress-operator ingresscontroller/default --patch '{"spec":{"namespaceSelector":{"matchExpressions":[{"key":"<key>","operator":"NotIn","values":["<value>]}]}}}'
    Copy to Clipboard Toggle word wrap

검증

  1. 다음 명령을 입력하여 DNS 항목이 클러스터 내부와 외부로 라우팅될 수 있는지 확인하세요. 이 명령은 프로시저의 앞부분에서 oc label node 명령을 실행하여 레이블을 수신한 노드의 IP 주소를 출력합니다.

    $ dig +short <svc_name>-<project_name>.<custom_ic_domain_name>
    Copy to Clipboard Toggle word wrap
  2. 클러스터가 DNS 확인을 위해 외부 DNS 서버의 IP 주소를 사용하는지 확인하려면 다음 명령을 입력하여 클러스터의 연결을 확인하세요.

    $ curl <svc_name>-<project_name>.<custom_ic_domain_name>:<port> 
    1
    Copy to Clipboard Toggle word wrap
    1 1
    여기서 <port>NodePort 유형 서비스 의 노드 포트입니다. oc get svc -n openshift-ingress 명령의 예시 출력을 기준으로 하면 80:32432/TCP HTTP 경로는 32432 가 노드 포트임을 의미합니다.

    출력 예

    Hello OpenShift!
    Copy to Clipboard Toggle word wrap

맨 위로 이동
Red Hat logoGithubredditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다. 최신 업데이트를 확인하세요.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

Theme

© 2025 Red Hat