GKE pod에 내부 HTTP(S) 부하 분산 설정

이 문서에서는 Google Kubernetes Engine(GKE) pod에서 실행되는 서비스에 대해 내부 HTTP(S) 부하 분산을 구성하는 방법을 설명합니다.

시작하기 전에

이 가이드의 지침에 따라 bash 또는 bash와 같은 셸을 사용해야 합니다. 예를 들어 Cloud Shell을 사용할 수 있습니다.

이 가이드의 안내를 따르려면 먼저 다음 문서를 검토하세요.

GKE 기반 서비스로 내부 HTTP(S) 부하 분산 구성

이 섹션에서는 GKE pod에서 실행되는 서비스에 필요한 구성을 보여줍니다. 클라이언트 VM은 전달 규칙에 구성된 IP 주소와 포트에 연결합니다. 클라이언트 애플리케이션에서 이 IP 주소 및 포트로 트래픽을 전송할 때 내부 HTTP(S) 부하 분산기의 URL 맵에 따라 요청이 백엔드 GKE pod로 전달됩니다.

이 페이지의 예시에서는 임시 내부 IP 주소 할당을 허용하는 대신 내부 전달 규칙에 예약된 내부 IP 주소를 명시적으로 설정합니다. 이는 전달 규칙에 권장되는 방법입니다.

전달 규칙의 IP 주소는 backend-subnet을 사용합니다. 프록시 전용 서브넷을 사용하려고 하면 전달 규칙 생성에 실패합니다.

백엔드 구성: GKE 클러스터

이 섹션에서는 노드의 호스트 이름을 제공하는 간단한 웹 서버를 실행하는 간단한 컨테이너를 실행하는 데 사용할 데모 GKE 클러스터와 배포를 만듭니다. 또한 NEG를 자동으로 만드는 ClusterIP 서비스를 만듭니다.

Console

Cloud Console을 사용하여 클러스터를 만들려면 다음 단계를 수행하세요.

  1. Cloud Console에서 Google Kubernetes Engine 메뉴로 이동합니다.

    Google Kubernetes Engine 메뉴로 이동

  2. 클러스터 만들기를 클릭합니다.

  3. 이름 필드에 l7-ilb-cluster을 입력합니다.

  4. 위치 유형으로 Zonal을 선택합니다.

  5. 영역으로 us-west1-b를 선택합니다.

  6. 기본 마스터 버전을 선택합니다.

  7. 가용성, 네트워킹, 보안, 추가 기능을 펼칩니다.

    1. VPC 네이티브 사용 설정(별칭 IP 사용) 체크박스가 선택되어 있는지 확인합니다.
    2. 네트워크lb-network를 선택합니다.
    3. 노드 서브넷으로 backend-subnet을 선택합니다.
    4. Enable HTTP load balancing 옆의 체크박스를 선택하여 부하 분산이 사용 설정되도록 합니다.
  8. 나머지 필드는 기본값을 유지하거나 필요에 맞게 조정합니다.

  9. 만들기를 클릭합니다.

Cloud Console을 사용하여 클러스터를 만들 때는 시스템 생성 네트워크 태그를 프록시 방화벽 필터에 추가해야 합니다.

  1. GKE가 클러스터의 노드에 추가한 네트워크 태그를 찾습니다. 태그는 클러스터 해시에서 생성됩니다.

    1. VM 인스턴스 페이지로 이동합니다.

      VM 인스턴스 페이지로 이동

    2. 풀다운 메뉴에서 네트워크 태그를 선택합니다.

    3. GKE 노드의 네트워크 태그를 복사합니다. 예를 들면 다음과 같습니다.

      gke-l7-ilb-cluster-id-node
      
  2. fw-allow-proxies 방화벽 규칙을 수정하고 태그를 추가합니다.

    1. Google Cloud Console에서 방화벽 규칙 페이지로 이동합니다.
      방화벽 규칙 페이지로 이동
    2. fw-allow-proxies 방화벽 규칙을 클릭한 다음 수정을 클릭합니다.
    3. 대상 태그 필드에 이전 단계에서 복사한 네트워크 태그를 추가합니다.
    4. 저장을 클릭합니다.

gcloud

  1. gcloud container clusters create 명령어를 사용하여 GKE 클러스터를 만듭니다.

    gcloud container clusters create l7-ilb-cluster \
        --zone=us-west1-b \
        --network=lb-network \
        --subnetwork=backend-subnet \
        --enable-ip-alias \
        --tags=allow-ssh,load-balanced-backend
    

api

projects.zones.clusters.create 메서드로 GKE 클러스터를 만듭니다. 여기서 [project-id]는 프로젝트 ID로 바꿉니다.

POST https://container.googleapis.com/v1/projects/[project-id]/zones/us-west1-b/clusters
{
  "cluster": {
    "name": "l7-ilb-cluster",
    "network": "projects/[project-id]/global/networks/lb-network",
    "subnetwork": "projects/[project-id]/regions/us-west1/subnetworks/backend-subnet",
    "initialClusterVersion": "",
    "location": "us-west1-b",
    "nodePools": [{
      "name": "l7-ilb-node-pool",
      "initialNodeCount": 3,
      "config": {
        "tags":["allow-ssh","load-balanced-backend"]
      }
    }],
    "defaultMaxPodsConstraint": {
      "maxPodsPerNode": "110"
    },
    "ipAllocationPolicy": {
      "useIpAliases": true
    }
  }
}

클러스터 작동을 위한 사용자 인증 정보 가져오기

gcloud container clusters get-credentials 명령어를 사용합니다.

gcloud container clusters get-credentials l7-ilb-cluster \
    --zone=us-west1-b

호스트 이름을 제공하는 테스트 컨테이너로 배포 정의

배포 및 서비스 사양으로 hostname.yaml을 만듭니다.

cat << EOF > hostname.yaml
apiVersion: v1
kind: Service
metadata:
  name: hostname
  annotations:
    cloud.google.com/neg: '{"exposed_ports":{"80":{}}}'
spec:
  ports:
  - port: 80
    name: host1
    protocol: TCP
    targetPort: 8000
  selector:
    run: hostname
  type: ClusterIP

---

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    run: hostname
  name: hostname
spec:
  replicas: 3
  selector:
    matchLabels:
      run: hostname
  template:
    metadata:
      labels:
        run: hostname
    spec:
      containers:
      - image: gcr.io/kubernetes-e2e-test-images/serve-hostname-amd64:1.1
        name: host1
        command:
        - /bin/sh
        - -c
        - /serve_hostname -http=true -udp=false -port=8000
        ports:
        - protocol: TCP
          containerPort: 8000
EOF

구성 적용

  1. 서비스 계정을 사용하여 Google Cloud에 대한 액세스를 승인하지 않는 경우 gcloud auth application-default login 명령어를 실행합니다.

    gcloud auth application-default login
    
  2. 구성을 적용합니다.

    kubectl apply -f hostname.yaml
    

배포 및 GKE 구성 확인

새 서비스 호스트 이름이 생성되었고 애플리케이션 pod가 실행 중인지 확인합니다.

kubectl get svc

출력 예시는 다음과 같습니다.

NAME         TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
hostname     ClusterIP   10.71.9.71           80/TCP    41m
[..skip..]

GKE는 클러스터 IP 범위를 backend-subnet의 보조 IP 범위로 자동 생성하므로 실제 클러스터 IP 주소는 다를 수 있습니다.

kubectl get pods

출력 예시는 다음과 같습니다.

NAME                        READY     STATUS    RESTARTS   AGE
hostname-6db459dcb9-896kh   1/1       Running   0          33m
hostname-6db459dcb9-k6ddk   1/1       Running   0          50m
hostname-6db459dcb9-x72kb   1/1       Running   0          33m
[..skip..]

출력에 새 서비스 호스트 이름이 표시됩니다. 호스트 이름 애플리케이션의 Pod에는 RunningSTATUS가 있어야 합니다.

Pod 이름은 샘플 이름과 다를 수 있습니다.

NEG의 이름 가져오기

gcloud compute network-endpoint-groups list 명령어를 사용하고 클러스터의 영역과 배포 이름으로 필터링하여 NEG의 이름을 찾습니다. NEG 이름을 DEPLOYMENT_NAME 변수에 할당합니다.

export DEPLOYMENT_NAME=$(gcloud compute network-endpoint-groups list \
       --filter="us-west1-b AND hostname" \
       --format="get(name)")
echo $DEPLOYMENT_NAME

NEG 구성 검토

gcloud compute network-endpoint-groups list-network-endpointsgcloud compute network-endpoint-groups describe명령어를 사용하여 세부정보를 살펴보고 NEG의 엔드포인트를 나열합니다.

gcloud compute network-endpoint-groups describe $DEPLOYMENT_NAME \
    --zone=us-west1-b
gcloud compute network-endpoint-groups list-network-endpoints $DEPLOYMENT_NAME \
    --zone=us-west1-b

GKE용 부하 분산기 구성

이 예시에서는 다음 내부 HTTP(S) 부하 분산기 리소스를 만드는 방법을 보여줍니다.

  • HTTP 상태 확인
  • NEG를 백엔드로 사용하는 백엔드 서비스
  • URL 맵
    • 대상 HTTP(S) 프록시에 리전이 정의되어 있으면 리전별 URL 맵을 참조해야 합니다. 리전별 URL 맵은 수신 URL의 호스트 및 경로에 대해 정의한 규칙에 따라 리전별 백엔드 서비스로 요청을 라우팅합니다. 리전별 URL 맵은 동일한 리전의 리전별 대상 프록시 규칙에서만 참조할 수 있습니다.
  • SSL 인증서(HTTPS용)
  • 대상 프록시
  • 전달 규칙

전달 규칙의 IP 주소는 backend-subnet을 사용합니다. 프록시 전용 서브넷을 사용하려고 하면 전달 규칙 생성에 실패합니다.

Console

부하 분산기 유형 선택

  1. Google Cloud Console의 부하 분산 페이지로 이동합니다.
    부하 분산 페이지로 이동
  2. HTTP(S) 부하 분산에서 구성 시작을 클릭합니다.
  3. VM 사이에서만 분산을 선택합니다. 이 설정은 부하 분산기가 내부용이라는 의미입니다.
  4. 계속을 클릭합니다.

부하 분산기 준비

  1. 부하 분산기 이름l7-ilb-gke-map을 입력합니다.
  2. 리전으로 us-west1을 선택합니다.
  3. 네트워크lb-network를 선택합니다.
  4. 계속하려면 창을 열어둡니다.

프록시 전용 서브넷 예약

내부 HTTP(S) 부하 분산의 경우 다음과 같이 프록시 서브넷을 예약합니다.

  1. 서브넷 예약을 클릭합니다.
  2. 이름proxy-only-subnet을 입력합니다.
  3. IP 주소 범위10.129.0.0/23을 입력합니다.
  4. 추가를 클릭합니다.

백엔드 서비스 구성

  1. 백엔드 구성을 클릭합니다.
  2. 백엔드 서비스 만들기 또는 선택 메뉴에서 백엔드 서비스 만들기를 선택합니다.
  3. 백엔드 서비스의 이름l7-ilb-gke-backend-service로 설정합니다.
  4. 백엔드 유형네트워크 엔드포인트 그룹을 선택합니다.
  5. 백엔드 섹션의 새 백엔드 카드에서 다음 안내를 따릅니다.
    1. 네트워크 엔드포인트 그룹을 GKE에서 만든 NEG로 설정합니다. 이름을 확인하는 방법은 NEG의 이름 가져오기를 참조하세요.
    2. 엔드포인트당 최대 속도에 5 RPS를 입력합니다. 필요한 경우 Google Cloud가 이 최댓값을 초과합니다.
    3. 완료를 클릭합니다.
  6. 상태 확인 섹션에서 상태 확인 만들기의 매개변수를 다음과 같이 선택합니다.
    1. 이름: l7-ilb-gke-basic-check
    2. 프로토콜: HTTP
    3. 포트 사양: 포트 제공
    4. 저장 후 계속을 클릭합니다.
  7. 만들기를 클릭합니다.

URL 맵 구성

  1. 호스트 및 경로 규칙을 클릭합니다. l7-ilb-gke-backend-service가 일치하지 않는 모든 호스트 및 일치하지 않는 모든 경로에 대한 유일한 백엔드 서비스인지 확인합니다.

프런트엔드 구성

HTTP의 경우:

  1. 프런트엔드 구성을 클릭합니다.
  2. 프런트엔드 IP 및 포트 추가를 클릭합니다.
  3. 이름l7-ilb-gke-forwarding-rule로 설정합니다.
  4. 프로토콜HTTP로 설정합니다.
  5. 서브네트워크백엔드 서브넷으로 설정합니다.
  6. 내부 IP에서 고정 내부 IP 주소 예약을 선택합니다.
  7. 표시되는 패널에 다음 세부정보를 입력합니다.
    1. 이름: l7-ilb-gke-ip
    2. 고정 IP 주소 섹션에서 직접 선택을 선택합니다.
    3. 커스텀 IP 주소 섹션에 10.1.2.199를 입력합니다.
    4. 예약을 클릭합니다.
  8. 포트80으로 설정합니다.
  9. 완료를 클릭합니다.

HTTPS의 경우:

클라이언트와 부하 분산기 사이에 HTTPS를 사용하는 경우 프록시를 구성할 하나 이상의 SSL 인증서 리소스가 필요합니다. SSL 인증서 리소스를 만드는 방법은 SSL 인증서를 참조하세요. 내부 HTTP(S) 부하 분산기에서는 현재 Google 관리 인증서가 지원되지 않습니다.

  1. 프런트엔드 구성을 클릭합니다.
  2. 프런트엔드 IP 및 포트 추가를 클릭합니다.
  3. 이름 필드에 l7-ilb-gke-forwarding-rule을 입력합니다.
  4. 프로토콜 필드에서 HTTPS (includes HTTP/2)를 선택합니다.
  5. 서브넷backend-subnet으로 설정합니다.
  6. 내부 IP에서 고정 내부 IP 주소 예약을 선택합니다.
  7. 표시되는 패널에 다음 세부정보를 입력합니다.
    1. 이름: l7-ilb-gke-ip
    2. 고정 IP 주소 섹션에서 직접 선택을 선택합니다.
    3. 커스텀 IP 주소 섹션에 10.1.2.199를 입력합니다.
    4. 예약을 클릭합니다.
  8. HTTPS 트래픽을 허용하도록 포트443으로 설정되어 있는지 확인합니다.
  9. 인증서 드롭다운 목록을 클릭합니다.
    1. 이미 기본 SSL 인증서로 사용할 자체 관리형 SSL 인증서 리소스가 있다면 드롭다운 메뉴에서 선택합니다.
    2. 그 이외의 경우 새 인증서 만들기를 선택합니다.
      1. l7-ilb-cert이름을 입력합니다.
      2. 해당 필드에 다음 PEM 형식의 파일을 업로드합니다.
        • 공개 키 인증서
        • 인증서 체인
        • 비공개 키
      3. 만들기를 클릭합니다.
  10. 기본 SSL 인증서 리소스 외에 인증서 리소스를 추가하려면 다음 안내를 따릅니다.
    1. 인증서 추가를 클릭합니다.
    2. 인증서 목록에서 인증서를 선택하거나 새 인증서 만들기를 클릭하고 위의 안내를 따릅니다.
  11. 완료를 클릭합니다.

구성 완료

  1. 만들기를 클릭합니다.

gcloud

  1. gcloud compute health-checks create http 명령어로 HTTP 상태 확인을 정의합니다.

    gcloud compute health-checks create http l7-ilb-gke-basic-check \
       --region=us-west1 \
       --use-serving-port
    
  2. gcloud compute backend-services create 명령어로 백엔드 서비스를 정의합니다.

    gcloud compute backend-services create l7-ilb-gke-backend-service \
      --load-balancing-scheme=INTERNAL_MANAGED \
      --protocol=HTTP \
      --health-checks=l7-ilb-gke-basic-check \
      --health-checks-region=us-west1 \
      --region=us-west1
    
  3. gcloud compute backend-services add-backend 명령어로 백엔드 서비스에 NEG 백엔드를 추가합니다.

    gcloud compute backend-services add-backend l7-ilb-gke-backend-service \
       --network-endpoint-group=$DEPLOYMENT_NAME \
       --network-endpoint-group-zone=us-west1-b \
       --region=us-west1 \
       --balancing-mode=RATE \
       --max-rate-per-endpoint=5
    
  4. gcloud compute url-maps create 명령어로 URL 맵을 만듭니다.

    gcloud compute url-maps create l7-ilb-gke-map \
      --default-service=l7-ilb-gke-backend-service \
      --region=us-west1
    
  5. 대상 프록시를 만듭니다.

    HTTP의 경우:

    gcloud compute target-http-proxies create명령어를 사용합니다.

    gcloud compute target-http-proxies create l7-ilb-gke-proxy \
      --url-map=l7-ilb-gke-map \
      --url-map-region=us-west1 \
      --region=us-west1
    

    HTTPS의 경우:

    SSL 인증서 리소스를 만드는 방법은 SSL 인증서를 참조하세요. 내부 HTTP(S) 부하 분산기에서는 현재 Google 관리 인증서가 지원되지 않습니다.

    파일 경로를 변수 이름에 할당합니다.

    `export LB_CERT=path to PEM-formatted file`
    
    `export LB_PRIVATE_KEY=path to PEM-formatted file`
    

    gcloud compute ssl-certificates create 명령어를 사용하여 리전별 SSL 인증서를 만듭니다.

    gcloud compute ssl-certificates create

    gcloud compute ssl-certificates create l7-ilb-cert \
      --certificate=$LB_CERT \
      --private-key=$LB_PRIVATE_KEY \
      --region=us-west1
    

    리전별 SSL 인증서를 사용하여 gcloud compute target-https-proxies create 명령어로 대상 프록시를 만듭니다.

    gcloud compute target-https-proxies create

    gcloud compute target-https-proxies create l7-ilb-gke-proxy \
      --url-map=l7-ilb-gke-map \
      --region=us-west1 \
      --ssl-certificates=l7-ilb-cert
    
  6. 전달 규칙을 만듭니다.

    커스텀 네트워크의 경우 전달 규칙에서 서브넷을 참조해야 합니다. 이때 참조할 서브넷은 프록시 서브넷이 아니라 VM 서브넷입니다.

    HTTP의 경우:

    gcloud compute forwarding-rules create 명령어를 올바른 플래그와 함께 사용합니다.

    gcloud compute forwarding-rules create l7-ilb-gke-forwarding-rule \
      --load-balancing-scheme=INTERNAL_MANAGED \
      --network=lb-network \
      --subnet=backend-subnet \
      --address=10.1.2.199 \
      --ports=80 \
      --region=us-west1 \
      --target-http-proxy=l7-ilb-gke-proxy \
      --target-http-proxy-region=us-west1
    

    HTTPS의 경우:

    gcloud compute forwarding-rules create 명령어를 올바른 플래그와 함께 사용합니다.

    gcloud compute forwarding-rules create l7-ilb-gke-forwarding-rule \
      --load-balancing-scheme=INTERNAL_MANAGED \
      --network=lb-network \
      --subnet=backend-subnet \
      --address=10.1.2.199 \
      --ports=443 \
      --region=us-west1 \
      --target-https-proxy=l7-ilb-gke-proxy \
      --target-https-proxy-region=us-west1
    

api

regionHealthChecks.insert 메서드에 POST 요청을 만들어 상태 확인을 만듭니다. 여기서 [project-id]는 프로젝트 ID로 바꿉니다.

POST https://compute.googleapis.com/compute/v1/projects/[project-id]/regions/{region}/healthChecks
{
  "name": "l7-ilb-gke-basic-check",
  "type": "HTTP",
  "httpHealthCheck": {
    "portSpecification": "USE_SERVING_PORT"
  }
}

regionBackendServices.insert 메서드에 POST 요청을 만들어 리전별 백엔드 서비스를 만듭니다. 여기서 [project-id]는 프로젝트 ID로, [neg-name]생성된 NEG의 이름으로 바꿉니다.

POST https://www.googleapis.com/compute/v1/projects/[project-id]/regions/us-west1/backendServices
{
  "name": "l7-ilb-gke-backend-service",
  "backends": [
    {
      "group": "https://www.googleapis.com/compute/v1/projects/[project-id]/zones/us-west1-b/networkEndpointGroups/[neg-name]",
      "balancingMode": "RATE",
      "maxRatePerEndpoint": 5
    }
  ],
  "healthChecks": [
    "projects/[project-id]/regions/us-west1/healthChecks/l7-ilb-gke-basic-check"
  ],
  "loadBalancingScheme": "INTERNAL_MANAGED"
}

regionUrlMaps.insert 메서드에 POST 요청을 만들어 URL 맵을 만듭니다. 여기서 [project-id]는 프로젝트 ID로 바꿉니다.

POST https://compute.googleapis.com/compute/v1/projects/[project-id]/regions/us-west1/urlMaps
{
  "name": "l7-ilb-gke-map",
  "defaultService": "projects/[project-id]/regions/us-west1/backendServices/l7-ilb-gke-backend-service"
}

regionTargetHttpProxies.insert 메서드에 POST 요청을 만들어 대상 HTTP 프록시를 만듭니다. 여기서 [project-id]는 프로젝트 ID로 바꿉니다.

POST https://www.googleapis.com/compute/v1/projects/[project-id]/regions/us-west1/targetHttpProxy
{
  "name": "l7-ilb-gke-proxy",
  "urlMap": "projects/[project-id]/global/urlMaps/l7-ilb-gke-map",
  "region": "us-west1"
}

forwardingRules.insert 메서드에 POST 요청을 만들어 전달 규칙을 만듭니다. 여기서 [project-id]는 프로젝트 ID로 바꿉니다.

POST https://www.googleapis.com/compute/v1/projects/[project-id]/regions/us-west1/forwardingRules
{
  "name": "l7-ilb-gke-forwarding-rule",
  "IPAddress": "10.1.2.199",
  "IPProtocol": "TCP",
  "portRange": "80-80",
  "target": "projects/[project-id]/regions/us-west1/targetHttpProxies/l7-ilb-gke-proxy",
  "loadBalancingScheme": "INTERNAL_MANAGED",
  "subnetwork": "projects/[project-id]/regions/us-west1/subnetworks/backend-subnet",
  "network": "projects/[project-id]/global/networks/lb-network",
  "networkTier": "PREMIUM",
}

테스트

영역에서 VM 인스턴스를 만들어 연결 테스트

gcloud compute instances create l7-ilb-client-us-west1-b \
    --image-family=debian-9 \
    --image-project=debian-cloud \
    --zone=us-west1-b \
    --network=lb-network \
    --subnet=backend-subnet \
    --tags=l7-ilb-client,allow-ssh

부하 분산기 테스트

클라이언트 인스턴스에 로그인하여 내부 HTTP(S) 부하 분산기의 전달 규칙 IP 주소를 통해 백엔드의 HTTP(S) 서비스에 액세스 가능하고 NEG의 엔드포인트 간에 트래픽 부하가 분산되는지 테스트합니다.

각 클라이언트 인스턴스에 SSH를 통해 연결

gcloud compute ssh l7-ilb-client-us-west1-b \
    --zone=us-west1-b

IP의 호스트 이름 제공 여부 확인

curl 10.1.2.199

HTTPS 테스트의 경우 curl를 다음으로 바꿉니다.

curl -k -s 'https://test.example.com:443' --connect-to test.example.com:443:10.1.2.199:443

-k 플래그로 인해 curl이 인증서 유효성 검사를 건너뜁니다.

100개의 요청 실행 및 부하 분산 여부 확인

HTTP의 경우:

{
RESULTS=
for i in {1..100}
do
    RESULTS="$RESULTS:$(curl --silent 10.1.2.199)"
done
echo "***"
echo "*** Results of load-balancing to 10.1.2.199: "
echo "***"
echo "$RESULTS" | tr ':' '\n' | grep -Ev "^$" | sort | uniq -c
echo
}

HTTPS의 경우:

{
RESULTS=
for i in {1..100}
do
    RESULTS="$RESULTS:$(curl -k -s 'https://test.example.com:443' --connect-to test.example.com:443:10.1.2.199:443
)"
done
echo "***"
echo "*** Results of load-balancing to 10.1.2.199: "
echo "***"
echo "$RESULTS" | tr ':' '\n' | grep -Ev "^$" | sort | uniq -c
echo
}

여러 프록시가 각 curl 명령어당 한 번씩 부하 분산을 수행하고 백엔드 선택을 조정하지 않습니다. 따라서 이 테스트에서 백엔드는 동일한 수의 요청을 수신하지 않습니다. 그러나 장기적으로 각 백엔드가 수신하는 요청 수(즉, 수천 개에서 수백만 개의 요청)는 균등하게 분배됩니다.

추가 구성 옵션

이 섹션에서는 대체 및 추가 구성 옵션을 제공하는 구성 예시를 살펴봅니다. 모든 작업은 선택사항입니다. 원하는 순서대로 수행할 수 있습니다.

세션 어피니티 사용 설정

이 절차에서는 백엔드 서비스가 생성된 쿠키 어피니티, 헤더 필드 어피니티 또는 HTTP 쿠키 어피니티를 사용하도록 예시 내부 HTTP(S) 부하 분산기의 백엔드 서비스를 업데이트하는 방법을 보여줍니다.

생성된 쿠키 어피니티가 설정되면 부하 분산기가 첫 번째 요청에서 쿠키를 생성합니다. 부하 분산기는 동일한 쿠키를 사용하는 각 후속 요청에서 같은 백엔드 VM 또는 엔드포인트로 요청을 전달합니다. 내부 HTTP(S) 부하 분산기의 경우 쿠키 이름은 GCILB입니다.

헤더 필드 어피니티가 사용 설정되면 부하 분산기는 --custom-request-header 플래그에 이름이 지정된 HTTP 헤더의 값에 따라 NEG의 백엔드 VM 또는 엔드포인트로 요청을 라우팅합니다. 헤더 필드 어피니티는 부하 분산 지역 정책이 RING_HASH 또는 MAGLEV이고 백엔드 서비스의 일관된 해시가 HTTP 헤더의 이름을 지정하는 경우에만 유효합니다.

HTTP 쿠키 어피니티가 사용 설정되면 부하 분산기는 선택 사항인 --affinity-cookie-ttl 플래그와 함께 HTTP_COOKIE 플래그에 이름이 지정된 HTTP 쿠키를 기반으로 NEG의 백엔드 VM 또는 엔드포인트로 요청을 라우팅합니다. 클라이언트가 HTTP 요청에 쿠키를 제공하지 않으면 프록시가 쿠키를 생성하여 Set-Cookie 헤더에 있는 클라이언트로 반환합니다. HTTP 쿠키 어피니티는 부하 분산 지역 정책이 RING_HASH 또는 MAGLEV이고 백엔드 서비스의 일관된 해시가 HTTP 쿠키를 지정하는 경우에만 유효합니다.

Console

백엔드 서비스의 세션 어피니티를 사용 설정하거나 변경하려면 다음 안내를 따르세요.

  1. Google Cloud Console의 부하 분산 페이지로 이동합니다.
    부하 분산 페이지로 이동
  2. 백엔드를 클릭합니다.
  3. l7-ilb-backend-service(이 예시에서 만든 백엔드 서비스 이름)를 클릭하고 수정을 클릭합니다.
  4. 백엔드 서비스 세부정보 페이지에서 고급 구성을 클릭합니다.
  5. 세션 어피니티의 메뉴에서 원하는 세션 어피니티 유형을 선택합니다.
  6. 업데이트를 클릭합니다.

gcloud

다음 gcloud 명령어를 사용하여 l7-ilb-backend-service 백엔드 서비스를 다른 유형의 세션 어피니티로 업데이트합니다.

gcloud compute backend-services update l7-ilb-backend-service \
    --session-affinity=[GENERATED_COOKIE | HEADER_FIELD | HTTP_COOKIE | CLIENT_IP ]
    --region=us=west1

API

세션 어피니티를 설정하려면 regionBackendServices/patch 메서드에 PATCH 요청을 수행합니다.

PATCH https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/regions/us-west1/regionBackendServices/l7-ilb-backend-service
{
  "sessionAffinity": ["GENERATED_COOKIE" | "HEADER_FIELD" | "HTTP_COOKIE" | "CLIENT_IP" ]
}

다음 단계