개인 경로 설정하기 Network Load Balancer for VPC

가상 사설 클라우드4.16 이상

공용 인터넷에 액세스할 수 없는 완전 사설 VPC 환경에서는 사설 경로 네트워크 로드 밸런서를 사용하여 VPC 클러스터에서 실행 중인 애플리케이션으로 흐르는 네트워크 트래픽의 균형을 맞출 수 있습니다. 자세한 내용은 비공개 경로 서비스 사용 사례를 참조하세요.

전제조건

  1. Red Hat OpenShift 클러스터에 액세스하십시오.

  2. 실행 중인 앱이 아직 없는 경우 클러스터에 앱을 배포하세요. 배치 구성 파일의 메타데이터 섹션에서 레이블을 추가했는지 확인하십시오. 이 사용자 정의 레이블은 앱이 실행되는 모든 팟(Pod)을 식별하여 로드 밸런싱에 포함시킵니다.

LoadBalancer 서비스 구성

  1. LoadBalancer 구성을 복사하여 lb.yaml 파일에 저장합니다.

    apiVersion: v1
    kind: Service
    metadata:
      name: <app_name>-vpc-nlb-<VPC_zone>
      annotations:
        service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-lb-name: "my-load-balancer"
        service.kubernetes.io/ibm-load-balancer-cloud-provider-enable-features: "private-path" # Required
        service.kubernetes.io/ibm-load-balancer-cloud-provider-ip-type: "private" # Required
        service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-subnets: "<subnet_ID>"
    spec:
      type: LoadBalancer
      selector:
        <selector_key>: <selector_value>
      ports:
       - name: http
         protocol: TCP
         port: 8080
         targetPort: 8080 # Optional. By default, the `targetPort` is set to match the `port` value unless specified otherwise.
       - name: https
         protocol: TCP
         port: 443
         targetPort: 443 # Optional. By default, the `targetPort` is set to match the `port` value unless specified otherwise.
      externalTrafficPolicy: Local # Specify Local or Cluster.
    
  2. 사용 사례에 맞게 필드를 사용자 지정합니다. 주석의 전체 목록은 주석 및 사양을 참조하세요.

  3. 변경사항을 저장하십시오.

  4. 로드 밸런서 서비스를 클러스터에 배포합니다.

    oc apply -f lb.yaml
    

비공개 경로 서비스 생성

비공개 경로 서비스 만들기 지침을 따릅니다.

가상 사설 엔드포인트 게이트웨이 설정하기

이제 로드 밸런서 서비스를 구성했으므로 클러스터의 애플리케이션에 액세스할 수 있도록 VPE(가상 사설 엔드포인트) 게이트웨이를 설정해야 합니다.

자세한 내용은 UI에서 엔드포인트 게이트웨이 만들기를 참조하세요.

VPE를 통해 앱에 연결하기

VPE를 통해 앱에 연결하는 방법에 대한 자세한 내용은 엔드포인트 게이트웨이 설정 후 가상 사설 엔드포인트에 액세스하기를 참조하세요.

주석 및 사양

필수 및 선택 사항인 VPC NLB 주석 및 사양을 검토하세요.

필수 주석 및 사양

externalTrafficPolicy
Local 또는 Cluster 을 지정합니다.
앱에 대한 클라이언트 요청의 소스 IP 주소를 유지하려면 Local로 설정하십시오. 이 설정은 들어오는 트래픽이 다른 노드로 전달되는 것을 방지합니다. 이 옵션은 HTTP 상태 확인도 구성합니다.
Cluster가 설정된 경우, DSR은 VPC NLB가 초기에 수신 요청을 전달하는 작업자 노드에서만 구현됩니다. 수신 요청이 도착하면 요청은 다른 영역에 있을 수 있는 앱 포드가 포함된 작업자 노드로 전달됩니다. 앱 팟(Pod)의 응답이 원래 작업자 노드로 전송되고 이 작업자 노드는 DSR을 사용하여 응답을 다시 클라이언트로 보내며 이때 VPC NLB를 우회합니다. 이 옵션은 TCP 상태 확인도 구성합니다.

선택적 주석 및 사양

service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-lb-name
VPC 부하 분산 장치를 영구적으로 사용할 수 있도록 고유 이름을 포함하세요. 영구 VPC 로드 밸런서는 소속된 클러스터가 삭제되어도 삭제되지 않습니다. 자세한 내용은 영구 VPC 로드밸런서를 참조하세요. 이 어노테이션은 로드 밸런서를 생성할 때만 설정할 수 있습니다. 업데이트 작업에는 사용할 수 없습니다.
service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-health-check-protocol
이 어노테이션은 Kubernetes 로드밸런서 서비스와 연결된 VPC 로드밸런서 리소스에 대한 상태 확인 프로토콜을 설정한다. 사용 가능한 옵션은 http, https 또는 tcp. 일반적으로 VPC LB 상태 확인 프로토콜은 Kubernetes 로드밸런서 서비스 사양의 externalTrafficPolicy 설정 값에 따라 결정됩니다. 그러나 이 주석은 해당 논리를 재정의합니다. 이 어노테이션은 Kubernetes, 특히 kube-proxy가 externalTrafficPolicy 다양한 설정과 관련하여 작동하는 방식을 변경하지 않습니다.
service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-health-check-port
상태 확인에 사용되는 TCP 포트로, 이 주석은 ibm-load-balancer-cloud-provider-vpc-health-check-protocol 지정된 경우에만 적용됩니다. 지정된 TCP 포트가 Kubernetes 노드 포트 범위(30,000~32,767)를 벗어날 경우, 클러스터 워커 노드에 적용된 VPC 보안 그룹을 수정하여 해당 포트에 대한 인바운드 트래픽을 허용해야 합니다. 이 어노테이션이 VPC ALB와 연결된 Kubernetes 로드 밸런서 서비스에 적용되는 경우, VPC ALB에 할당된 보안 그룹의 아웃바운드 규칙을 수정하여 지정된 TCP 포트로의 아웃바운드 트래픽을 허용해야 합니다. 자세한 내용은 기본 클러스터 VPC 네트워킹을 통한 보안 이해하기VPC 보안 그룹 만들기 및 관리하기를 참조하세요.
service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-subnets
ppNLB IP 주소를 할당하는 데 사용할 서브넷을 지정하는 주석입니다. 이러한 IP 주소는 내부적으로만 사용됩니다. 이 값은 VPC 서브넷 ID, VPC 서브넷 이름 또는 VPC 서브넷 CIDR일 수 있습니다. 하나의 서브넷만 지정해야 합니다. 모든 수신 트래픽은 이러한 IP 주소에서 발생하는 것으로 보입니다. 모든 주소가 단일 영역에 있는 동안에도 ppNLB 모든 영역에서 들어오는 트래픽을 처리합니다. 이 특정 영역이 완료되면 다른 영역에서 들어오는 트래픽은 계속 작동합니다. 이 주석을 지정하지 않으면 서브넷이 자동으로 선택되고 사용 가능한 IP 주소가 가장 많은 클러스터 작업자 노드 서브넷이 사용됩니다. 모든 리소스 그룹의 서브넷을 보려면 ibmcloud oc subnets --provider vpc-gen2 --vpc-id VPC_ID --zone ZONE을 실행하십시오.
service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-node-selector
워커 노드 레이블 선택기를 지정하기 위한 어노테이션. 레이블 선택기 키를 지정하여 클러스터의 특정 워커 노드가 트래픽을 수신하도록 구성할 수 있습니다. 주석에는 레이블 선택기를 하나만 포함할 수 있으며, 해당 선택기는 "key=value" 형식으로 지정되어야 합니다. 이 어노테이션이 지정되지 않은 경우, 클러스터 내의 모든 워커 노드는 VPC NLB로부터 트래픽을 수신하도록 구성됩니다. 이 어노테이션은 service.kubernetes.io/ibm-load-balancer-cloud-provider-zone 어노테이션보다 우선하며, 워커 노드에 지정된 dedicated: edge 레이블은 무시됩니다. 특정 영역으로 트래픽을 제한하려면 이 어노테이션을 사용하여 해당 영역의 워커 노드를 지정할 수 있습니다. 클러스터 워커 노드에 새 레이블을 설정한다고 해서 자동으로 트래픽을 수신하도록 워커 노드가 구성되는 것은 아니며, 새로 레이블이 지정된 워커 노드가 트래픽을 수신하려면 VPC NLB를 다시 만들거나 업데이트해야 합니다.
service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-health-check-path
HTTP 및 HTTP 상태 확인을 위한 상태 확인 URL 경로입니다. 이 주석은 ibm-load-balancer-cloud-provider-vpc-health-check-protocol http 또는 https 설정된 경우에만 적용됩니다. URL 경로는 원본 양식 요청 대상의 형식이어야 합니다. 이 어노테이션을 지정하지 않고 ibm-load-balancer-cloud-provider-vpc-health-check-protocol 어노테이션을 http 또는 https 설정하면 기본값 / 적용됩니다.
service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-health-check-delay
선택사항. 상태 확인 시도 사이에 대기할 시간(초)입니다. 기본적으로 이 값은 5 설정되며 최소값은 2 최대값은 60. 이 값은 기본적으로 2 설정된 ibm-load-balancer-cloud-provider-vpc-health-check-timeout 값보다 커야 합니다.
service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-health-check-timeout
선택사항. 상태 확인에 대한 응답을 기다리는 시간(초)입니다. 기본적으로 이 값은 2 설정되며 최소값은 1 최대값은 59. 이 값은 기본적으로 5 설정되어 있는 ibm-load-balancer-cloud-provider-vpc-health-check-delay 작아야 합니다.
service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-health-check-retries
VPC 로드 밸런서에 대한 최대 상태 확인 재시도 횟수입니다. 기본적으로 이 값은 2 설정되며 최소값은 1 최대값은 10.
service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-member-quota
선택사항입니다. 로드밸런서가 라우팅하는 영역당 작업자 노드 수입니다. 기본값은 8입니다. 3개 존에 워커 노드가 있는 클러스터의 경우, 이로 인해 로드 밸런서가 총 24개의 워커 노드로 트래픽을 라우팅하게 됩니다. 로드 밸런서가 라우팅하는 모든 영역의 총 작업자 노드 수는 50개를 초과할 수 없습니다. 클러스터의 워커 노드가 모든 영역에 걸쳐 50개 미만인 경우, 0을 지정하여 영역의 모든 워커 노드로 라우팅합니다.
selector
앱 배치 YAML의 spec.template.metadata.labels 섹션에서 사용한 레이블 키(<selector_key>) 및 값(<selector_value>)입니다. 이 사용자 정의 레이블은 앱이 실행되는 모든 팟(Pod)을 식별하여 로드 밸런싱에 포함시킵니다.
port
서비스가 청취하는 포트입니다.
targetPort
선택사항: 서비스가 트래픽을 지정하는 대상 포트입니다. 포드에서 실행 중인 애플리케이션은 이 대상 포트에서 들어오는 TCP 트래픽을 수신 대기해야 합니다. 대상 포트는 애플리케이션 포드에서 실행 중인 이미지에 정적으로 정의되는 경우가 많습니다. 파드에 구성된 대상 포트는 서비스의 노드 포트와 다르며 VPC LB에 구성된 외부 포트와도 다를 수 있습니다.