수동 부하 분산 구성

이 페이지에서는 수동 부하 분산을 사용할 때의 부하 분산 요구사항을 설명합니다. 베어메탈용 GDCV가 제어 영역과 데이터 영역 트래픽의 클러스터 노드에 부하 분산기를 배포하는 번들 부하 분산과 달리 수동 부하 분산을 사용하면 제어 영역과 데이터 영역 트래픽에 대한 고유한 부하 분산 솔루션을 구성할 수 있습니다.

베어메탈 클러스터를 만들기 전에 제어 영역에 외부 부하 분산기를 설정해야 합니다. 외부 제어 영역 부하 분산기를 데이터 영역 트래픽에 사용할 수도 있고, 데이터 영역에 대해 별도의 부하 분산기를 설정할 수도 있습니다. 예를 들어 데이터 영역 트래픽에 MetalLB와 같은 클러스터 내 부하 분산기를 사용할 수 있습니다.

부하 분산 요구사항을 설명하는 것 외에도 이 페이지에서는 F5 BIG-IP를 사용하여 수동 부하 분산을 구성하는 방법을 설명합니다.

기본 요건

다음 섹션에서는 수동 부하 분산 구성의 기본 요건을 설명합니다.

필수 IP 주소

클러스터를 만들기 전에 VIP를 계획해야 합니다. 모든 클러스터에는 제어 영역의 VIP가 필요합니다. 모든 사용자 클러스터에는 인그레스 서비스에 대해 두 번째 VIP가 필요합니다.

이러한 VIP는 부하 분산기에서 라우팅할 수 있는 모든 IPv4 서브넷에 있을 수 있습니다. 모든 클러스터 노드와 bmctl을 실행하는 관리자 워크스테이션에서 제어 영역 VIP에 연결할 수 있어야 합니다.

클러스터를 만들 때 인그레스 서비스는 클러스터 구성 파일에 지정된 VIP를 사용하여 배포됩니다. 클러스터를 만든 후 이 IP 주소의 부하 분산을 구성할 수 있습니다.

제어 영역 노드로 사용될 노드에 사용할 IP 주소를 알고 있어야 합니다.

외부 제어 영역 부하 분산기 요구사항

클러스터를 만들기 전에 제어 영역 부하 분산기를 구성해야 합니다. 제어 영역 부하 분산기는 다음 요구사항을 충족해야 합니다.

  • 제어 영역 VIP의 가상 서비스(프런트엔드). 제어 영역의 기본 리슨 포트는 443입니다. 그러나 다른 포트를 지정하면 클러스터 구성 파일의 loadBalancer.ports.controlPlaneLBPort 필드가 가상 서비스의 해당 포트를 사용합니다.
  • 클러스터 제어 영역 노드의 모든 IP 주소가 포함된 백엔드 그룹. 제어 영역이 리슨하는 백엔드 포트는 6444입니다.
  • 백엔드 노드를 모니터링하는 상태 확인. 상태 확인은 HTTPS를 사용하고 포트 6444에서 /readyz 엔드포인트를 확인해야 합니다. 상태 확인은 이 엔드포인트가 노드 상태를 고려하기 위해 상태 코드 200을 반환하는지 확인해야 합니다.

외부 부하 분산기가 올바르게 구성되지 않으면 클러스터 부트스트랩이 실패할 수 있습니다. 실행 전 검사는 부하 분산기가 /readyz 엔드포인트 상태를 확인하는지 여부를 포함하여 외부 부하 분산기가 올바르게 구성되었는지 확인합니다.

장애 발생 노드에 대한 연결 재설정(권장)

위의 요구사항 외에도 백엔드 노드 장애가 감지되면 클라이언트 연결을 재설정하도록 부하 분산기를 구성하는 것이 좋습니다. 이 구성을 사용하지 않으면 Kubernetes API 서버의 클라이언트가 서버 인스턴스가 다운될 때 몇 분 동안 응답을 중지할 수 있으며, 이로 인해 Kubernetes 제어 영역이 불안정해질 수 있습니다.

  • F5 BIG-IP의 경우 이 설정은 백엔드 풀 구성 페이지에서 Action On Service Down이라고 합니다.
  • HAProxy의 경우 이 설정은 백엔드 서버 구성에서 on-marked-down shutdown-sessions라고 부릅니다.
  • 다른 부하 분산기를 사용하는 경우 해당 문서를 참조하여 해당하는 설정을 찾아야 합니다.

클러스터 구성

베어메탈용 GKE 클러스터를 만들기 전에 bmctl을 사용하여 클러스터 구성 파일을 만듭니다. 이 파일을 수정하여 클러스터에서 수동 부하 분산을 사용 설정합니다.

  1. loadBalancer.mode 필드를 manual로 설정합니다.
  2. loadBalancer.vips.controlPlaneVIP 필드를 부하 분산기에서 구성한 VIP로 설정합니다.
  3. loadBalancer.addressPools 섹션을 삭제하거나 주석 처리합니다.

부하 분산과 관련 없는 필드를 포함한 구성 파일 수정을 완료한 후 실행 전 검사를 실행하여 제어 영역 VIP가 부하 분산기에서 올바르게 구성되었는지 확인합니다.

bmctl check preflight -c CLUSTER_NAME

CLUSTER_NAME을 클러스터 이름으로 바꿉니다.

사용자 클러스터에서 LoadBalancer 서비스 지원

Kubernetes LoadBalancer 서비스를 지원하도록 부하 분산을 구성해야 합니다. 수동 부하 분산 모드에서 베어메탈용 GDCV는 부하 분산기를 자동으로 프로비저닝하지 않으므로 서비스를 가리키도록 부하 분산기를 프로비저닝하고 구성하지 않는 한 LoadBalancer 서비스는 작동하지 않습니다.

또한 베어메탈용 GDCV는 LoadBalancer 서비스를 사용하여 모든 사용자 클러스터에 인그레스 서비스를 자동으로 배포합니다. 외부에서 액세스할 수 있도록 하려면 이 LoadBalancer 서비스에서 해당 서비스를 가리키도록 부하 분산기를 구성해야 합니다.

LoadBalancer 서비스를 지원하는 옵션은 다음과 같습니다.

  • 클러스터의 모든 LoadBalancer 서비스에 대해 부하 분산기를 수동으로 구성합니다. F5 BIG-IP를 사용하는 예시는 LoadBalancer 서비스 지원 구성을 참조하세요.
  • LoadBalancer 서비스가 생성되면 외부 부하 분산기를 구성하는 클러스터에 부하 분산기 컨트롤러를 설치합니다.
  • MetalLB와 같은 클러스터 내 부하 분산 솔루션을 설치합니다.

F5 BIG-IP를 사용한 수동 부하 분산

이 섹션에서는 외부 부하 분산기로 F5 BIG-IP를 사용하여 수동 부하 분산을 구성하는 방법을 설명합니다. 다른 부하 분산기를 사용하는 경우 해당 부하 분산기에 대한 문서를 참조한 후 이 단계를 모델로 사용합니다.

제어 영역 부하 분산기 구성

클러스터를 만들기 전에 제어 영역 부하 분산기를 구성해야 합니다. 이 단계를 수행한 후에 클러스터를 구성하고 만들 수 있습니다.

클러스터의 파티션 만들기

각 클러스터에는 고유한 파티션이 있어야 합니다. BIG-IP 구성 유틸리티를 사용하여 파티션을 만듭니다.

  1. 시스템 > 사용자 > 파티션 목록으로 이동합니다.
  2. 만들기를 클릭합니다.
  3. 파티션의 이름을 입력합니다.
  4. 완료됨을 클릭합니다.

다음 단계에서는 이 파티션에 객체를 만듭니다. 이 파티션에서 각 객체가 생성되도록 다음 각 태스크의 UI 오른쪽 상단에 있는 드롭다운 메뉴에서 이 파티션이 선택되었는지 확인합니다.

모니터 만들기

제어 영역 노드에서 상태 확인을 수행하기 위한 모니터를 만듭니다.

  1. 로컬 트래픽 > 모니터로 이동합니다.
  2. 만들기를 클릭합니다.
  3. 모니터의 이름을 입력합니다(예: https_readyz).
  4. 유형HTTPS로 설정합니다.
  5. 문자열 보내기GET /readyz HTTP/1.1\r\nHost: \r\nConnection: close를 입력합니다.
  6. 문자열 수신HTTP/1.1 200를 입력합니다.
  7. 완료됨을 클릭합니다.

노드 만들기

제어 영역 노드를 가리키는 노드를 만듭니다. 클러스터에 여러 제어 영역 노드가 있는 고가용성(HA) 제어 영역이 있는 경우 각 제어 영역 노드에 노드 객체를 만듭니다.

  1. 로컬 트래픽 > 노드 > 노드 목록으로 이동합니다.
  2. 만들기를 클릭합니다.
  3. 노드 이름을 입력합니다.
  4. 주소 필드에 노드의 IP 주소를 입력합니다.
  5. 완료됨을 클릭합니다.

백엔드 풀 만들기

제어 영역 노드의 을 만듭니다.

  1. 로컬 트래픽 > 풀 > 풀 목록으로 이동합니다.
  2. 만들기를 클릭합니다.
  3. 구성 드롭다운에서 고급을 선택합니다.
  4. 풀의 이름을 입력합니다.
  5. 앞에서 만든 상태 모니터를 선택합니다.
  6. Actions on Service Down거부로 설정합니다(장애 발생 노드에 대한 연결 재설정 섹션에서 이 설정에 대한 설명 참조).
  7. 풀에 제어 영역 노드를 추가합니다. 클러스터에 제어 영역 노드가 여러 개 있는 경우 각 노드에서 다음 단계를 반복합니다.
    1. 새 구성원 섹션에서 노드 목록을 클릭한 다음 이전에 만든 제어 영역 노드를 선택합니다.
    2. 서비스 포트 필드에 6444를 입력합니다.
    3. 추가를 클릭합니다.

가상 서버 만들기

제어 영역에 대한 가상 서버를 만듭니다.

  1. 로컬 트래픽 > 가상 서버 > 가상 서버 목록으로 이동합니다.
  2. 만들기를 클릭합니다.
  3. 가상 서버 이름을 입력합니다.
  4. 유형표준으로 설정합니다.
  5. 소스 주소 필드에 0.0.0.0/0을 입력하여 모든 소스의 트래픽을 허용합니다.
  6. 대상 주소로 제어 영역 VIP를 입력합니다.
  7. 서비스 포트로 제어 영역 포트를 입력합니다. 이 값은 기본적으로 443이지만 구성 가능하며 loadBalancer.ports.controlPlaneLBPort의 클러스터 구성에서 구성한 것과 일치해야 합니다.
  8. 소스 주소 변환 필드에서 자동 맵을 선택합니다.
  9. 기본 풀의 드롭다운에서 이전에 만든 풀을 선택합니다.
  10. 완료됨을 클릭합니다.

LoadBalancer 서비스에 대한 지원 구성

수동 부하 분산 모드에서 베어메탈용 GDCV는 LoadBalancer 서비스를 지원하도록 부하 분산기를 자동으로 프로비저닝하지 않습니다. 자세한 내용은 사용자 클러스터에서 LoadBalancer 서비스 지원을 참조하세요.

이 섹션에서는 LoadBalancer 서비스에 대해 F5 BIG-IP 부하 분산기를 수동으로 구성하는 방법을 보여줍니다. 노출하려는 각 LoadBalancer 서비스마다 이 단계를 반복합니다.

기본 요건

LoadBalancer 서비스를 구성하려면 부하 분산기를 통해 노출하려는 VIP, VIP를 노출할 포트, Kubernetes의 LoadBalancer 서비스에서 사용 중인 NodePort를 알아야 합니다.

클러스터에 LoadBalancer 서비스를 배포한 후에는 LoadBalancer 서비스에 사용되는 NodePort를 결정합니다. 다음 명령어는 서비스의 포트를 보여줍니다.

kubectl --kubeconfig KUBECONFIG get service SERVICE_NAME -oyaml

다음을 바꿉니다.

  • KUBECONFIG를 사용할 kubeconfig 파일의 경로로 바꿉니다.
  • SERVICE_NAME을 LoadBalancer 서비스의 이름으로 바꿉니다.

kubctl get service 출력에는 ports 섹션이 포함됩니다. 각 포트 항목은 서비스에서 포트에 노출된 nodePort를 나타내며 이 nodePort는 부하 분산기 백엔드를 가리키도록 구성됩니다. 다음 샘플 출력에서는 ports 섹션의 구조를 보여줍니다.

spec:
  clusterIP: 172.26.232.107
  externalTrafficPolicy: Cluster
  loadBalancerIP: 21.0.101.77
  ports:
  - name: status-port
    nodePort: 30281
    port: 15021
    protocol: TCP
    targetPort: 15021
  - name: http
    nodePort: 30124
    port: 80
    protocol: TCP
    targetPort: 80
  - name: https
    nodePort: 31858
    port: 443
    protocol: TCP
    targetPort: 443

HTTP 및 HTTPS 트래픽용 포트가 있습니다. 부하 분산기를 통해 이러한 포트 중 하나 또는 둘 다를 노출할 수 있습니다.

모든 클러스터에 자동으로 배포되는 인그레스 서비스를 노출하는 경우 LoadBalancer 서비스의 이름은 istio-ingress이며 gke-system 네임스페이스에 있습니다. 다음 명령어로 포트를 찾습니다.

kubectl --kubeconfig KUBECONFIG -n gke-system get service istio-ingress -oyaml

인그레스 서비스는 초기 클러스터 구성의 loadBalancer.vips.ingressVIP 필드에 제공된 IP인 loadBalancerIP를 사용하여 구성됩니다. 외부 부하 분산기에 인그레스 서비스를 노출하도록 이 VIP를 노출해야 합니다.

백엔드 풀 만들기

  1. 로컬 트래픽 > 풀 > 풀 목록으로 이동합니다.
  2. 만들기를 클릭합니다.
  3. 풀의 이름을 입력합니다.
  4. 상태 모니터로 tcp를 선택합니다.
  5. 노드 풀에 워커 노드를 추가합니다. 각 노드에 이 단계를 반복합니다. 클러스터의 모든 노드에서 Kubernetes NodePort에 액세스할 수 있으므로 제어 영역과 워커 노드를 추가할 수 있습니다.
    1. 새 구성원 섹션에서 노드 목록을 클릭한 다음 이전에 만든 노드 중 하나를 선택합니다.
    2. 서비스 포트 필드에 서비스의 NodePort 값을 입력합니다.
    3. 추가를 클릭합니다.

가상 서버 만들기

  1. 로컬 트래픽 > 가상 서버 > 가상 서버 목록으로 이동합니다.
  2. 만들기를 클릭합니다.
  3. 가상 서버 이름을 입력합니다.
  4. 유형표준으로 설정합니다.
  5. 소스 주소 필드에 0.0.0.0/0을 입력하여 모든 소스의 트래픽을 허용합니다.
  6. 대상 주소에 부하 분산기 서비스 VIP를 입력합니다.
  7. 부하 분산기 서비스에 노출되는 포트를 서비스 포트로 입력합니다.
  8. 소스 주소 변환 필드에서 자동 맵을 선택합니다.
  9. 기본 풀의 드롭다운에서 이전에 만든 풀을 선택합니다.
  10. 완료됨을 클릭합니다.