정책을 사용하여 게이트웨이 리소스 구성


이 페이지에서는 GKE 클러스터에 게이트웨이를 배포할 때 Google Kubernetes Engine(GKE)이 만드는 부하 분산기를 구성하는 방법을 보여줍니다.

게이트웨이를 배포할 때 GatewayClass 구성에 따라 GKE가 만드는 부하 분산기가 결정됩니다. 이 관리형 부하 분산기는 정책을 사용하여 수정할 수 있는 기본 설정으로 사전 구성됩니다.

게이트웨이, 서비스 또는 ServiceImport에 정책을 연결하여 인프라 또는 애플리케이션 요구사항에 맞게 게이트웨이 리소스를 맞춤설정할 수 있습니다. 정책을 적용하거나 수정한 후에는 게이트웨이, 경로, 서비스 리소스를 삭제하거나 다시 만들 필요가 없습니다. 정책은 게이트웨이 컨트롤러에서 처리되며 기본 부하 분산기 리소스는 (신규) 정책에 따라 (재)구성됩니다.

시작하기 전에

시작하기 전에 다음 태스크를 수행했는지 확인합니다.

  • Google Kubernetes Engine API를 사용 설정합니다.
  • Google Kubernetes Engine API 사용 설정
  • 이 태스크에 Google Cloud CLI를 사용하려면 gcloud CLI를 설치한 후 초기화합니다. 이전에 gcloud CLI를 설치한 경우 gcloud components update를 실행하여 최신 버전을 가져옵니다.

GKE Gateway Controller 요구사항

  • 표준인 경우 GKE 버전 1.24 이상
  • Autopilot의 경우 GKE 버전 1.26 이상
  • Google Cloud CLI 버전 407.0.0 이상
  • Gateway API는 VPC 기반 클러스터에서만 지원됩니다.
  • 내부 GatewayClasses를 사용하는 경우 프록시 전용 서브넷을 사용 설정해야 합니다.
  • 클러스터에 HttpLoadBalancing 부가기능이 사용 설정되어 있어야 합니다.
  • Istio를 사용하는 경우 Istio를 다음 버전 중 하나로 업그레이드해야 합니다.
    • 1.15.2 이상
    • 1.14.5 이상
    • 1.13.9 이상
  • 공유 VPC를 사용하는 경우 호스트 프로젝트에서 서비스 프로젝트의 GKE 서비스 계정에 Compute Network User 역할을 할당해야 합니다.

제한 및 한도

GKE 게이트웨이 컨트롤러 제한 및 한도 외에도 다음 제한사항이 게이트웨이 리소스에 적용되는 정책에 적용됩니다.

  • GCPGatewayPolicy 리소스는 gateway.networking.k8s.io Gateway에만 연결할 수 있습니다.

  • GCPGatewayPolicy 리소스는 대상 Gateway와 동일한 네임스페이스에 있어야 합니다.

  • 단일 클러스터 게이트웨이, GCPBackendPolicy, HealthCheckPolicy를 사용할 때 리소스는 Service 리소스를 참조해야 합니다.

  • 멀티 클러스터 게이트웨이, GCPBackendPolicy, HealthCheckPolicy를 사용할 때 리소스는 ServiceImport 리소스를 참조해야 합니다.
  • 한 번에 GCPGatewayPolicy 하나만 서비스에 연결할 수 있습니다. 2개의 GCPGatewayPolicy 정책이 생성되고 동일한 Service 또는 ServiceImport를 대상으로 하는 경우 가장 오래된 정책이 우선 적용되고 두 번째 정책은 연결되지 않습니다.

  • 계층적 정책은 GKE 게이트웨이에서 지원되지 않습니다.

  • HealthCheckPolicyGCPBackendPolicy 리소스는 대상 Service 또는 ServiceImport 리소스와 동일한 네임스페이스에 있어야 합니다.

  • GCPBackendPolicyHealthCheckPolicy 리소스는 하나의 백엔드 서비스만 참조할 수 있는 방식으로 구조화됩니다.

리전 내부 게이트웨이의 전역 액세스 구성

이 섹션에서는 버전 1.24 이상을 실행하는 GKE 클러스터에서 사용할 수 있는 기능을 설명합니다.

내부 게이트웨이로 전역 액세스를 사용 설정하려면 게이트웨이 리소스에 정책을 연결합니다.

다음 GCPGatewayPolicy 매니페스트는 전역 액세스를 위해 리전 내부 게이트웨이를 사용 설정합니다.

apiVersion: networking.gke.io/v1
kind: GCPGatewayPolicy
metadata:
  name: my-gateway-policy
  namespace: default
spec:
  default:
    allowGlobalAccess: true
  targetRef:
    group: gateway.networking.k8s.io
    kind: Gateway
    name: my-gateway

클라이언트 및 부하 분산기 간 트래픽 보호를 위한 SSL 정책 구성

이 섹션에서는 버전 1.24 이상을 실행하는 GKE 클러스터에서 사용할 수 있는 기능을 설명합니다.

클라이언트 및 부하 분산기 간 트래픽을 보호하려면 정책 이름을 GCPGatewayPolicy에 추가하여 SSL 정책을 구성합니다. 기본적으로 게이트웨이에는 SSL 정책이 정의 및 연결되어 있지 않습니다.

GCPGatewayPolicy에서 정책을 참조하기 전에 SSL 정책을 만들어야 합니다.

다음 GCPGatewayPolicy 매니페스트는 gke-gateway-ssl-policy라는 보안 정책을 지정합니다.

apiVersion: networking.gke.io/v1
kind: GCPGatewayPolicy
metadata:
  name: my-gateway-policy
  namespace: team1
spec:
  default:
    sslPolicy: gke-gateway-ssl-policy
  targetRef:
    group: gateway.networking.k8s.io
    kind: Gateway
    name: my-gateway

상태 확인 구성

이 섹션에서는 버전 1.24 이상을 실행하는 GKE 클러스터에서 사용할 수 있는 기능을 설명합니다.

HealthCheckPolicy를 사용하여 부하 분산기 상태 점검 설정을 제어할 수 있습니다. 각 유형의 상태 점검(http, https, grpc, http2)에는 정의할 수 있는 매개변수가 하나 있습니다. Google Cloud는 각 GKE 서비스의 백엔드 서비스마다 고유한 상태 점검을 만듭니다.

다음 HealthCheckPolicy 매니페스트에서는 상태 점검 정책을 구성할 때 사용할 수 있는 모든 필드를 보여줍니다.

서비스

apiVersion: networking.gke.io/v1
kind: HealthCheckPolicy
metadata:
  name: lb-healthcheck
  namespace: lb-service-namespace
spec:
  default:
    checkIntervalSec: INTERVAL
    timeoutSec: TIMEOUT
    healthyThreshold: HEALTHY_THRESHOLD
    unhealthyThreshold: UNHEALTHY_THRESHOLD
    logConfig:
      enabled: ENABLED
    config:
      type: PROTOCOL
      httpHealthCheck:
        portSpecification: PORT_SPECIFICATION
        port: PORT
        portName: PORT_NAME
        host: HOST
        requestPath: REQUEST_PATH
        response: RESPONSE
        proxyHeader: PROXY_HEADER
      httpsHealthCheck:
        portSpecification: PORT_SPECIFICATION
        port: PORT
        portName: PORT_NAME
        host: HOST
        requestPath: REQUEST_PATH
        response: RESPONSE
        proxyHeader: PROXY_HEADER
      grpcHealthCheck:
        grpcServiceName: GRPC_SERVICE_NAME
        portSpecification: PORT_SPECIFICATION
        port: PORT
        portName: PORT_NAME
      http2HealthCheck:
        portSpecification: PORT_SPECIFICATION
        port: PORT
        portName: PORT_NAME
        host: HOST
        requestPath: REQUEST_PATH
        response: RESPONSE
        proxyHeader: PROXY_HEADER
  targetRef:
    group: ""
    kind: Service
    name: lb-service

멀티 클러스터 서비스

apiVersion: networking.gke.io/v1
kind: HealthCheckPolicy
metadata:
  name: lb-healthcheck
  namespace: lb-service-namespace
spec:
  default:
    checkIntervalSec: INTERVAL
    timeoutSec: TIMEOUT
    healthyThreshold: HEALTHY_THRESHOLD
    unhealthyThreshold: UNHEALTHY_THRESHOLD
    logConfig:
      enabled: ENABLED
    config:
      type: PROTOCOL
      httpHealthCheck:
        portSpecification: PORT_SPECIFICATION
        port: PORT
        portName: PORT_NAME
        host: HOST
        requestPath: REQUEST_PATH
        response: RESPONSE
        proxyHeader: PROXY_HEADER
      httpsHealthCheck:
        portSpecification: PORT_SPECIFICATION
        port: PORT
        portName: PORT_NAME
        host: HOST
        requestPath: REQUEST_PATH
        response: RESPONSE
        proxyHeader: PROXY_HEADER
      grpcHealthCheck:
        grpcServiceName: GRPC_SERVICE_NAME
        portSpecification: PORT_SPECIFICATION
        port: PORT
        portName: PORT_NAME
      http2HealthCheck:
        portSpecification: PORT_SPECIFICATION
        port: PORT
        portName: PORT_NAME
        host: HOST
        requestPath: REQUEST_PATH
        response: RESPONSE
        proxyHeader: PROXY_HEADER
  targetRef:
    group: net.gke.io
    kind: ServiceImport
    name: lb-service

다음을 바꿉니다.

  • INTERVAL: 각 상태 점검 프로버의 check-interval을 초 단위로 지정합니다. 이 값은 한 프로버에서 확인을 시작한 후 다음 번에 확인을 시작할 때까지 걸리는 시간입니다. 이 매개변수를 생략하면 Google Cloud 기본값은 5초입니다. 자세한 내용은 여러 프로브 및 빈도를 참조하세요.
  • TIMEOUT: Google Cloud에서 프로브에 대한 응답을 기다리는 시간을 지정합니다. TIMEOUT 값은 INTERVAL보다 작거나 같아야 합니다. 단위는 초입니다. 각 프로브에는 프로브 제한 시간 전에 HTTP 200 (OK) 응답 코드가 전달되어야 합니다.
  • HEALTHY_THRESHOLDUNHEALTHY_THRESHOLD: 프로버 최소 하나 이상에서 상태가 정상에서 비정상으로 또는 정상에서 정상으로 변경되도록 성공하거나 실패해야 하는 순차적 연결 시도 수를 지정합니다. 이러한 매개변수 중 하나를 생략하면 Google Cloud 기본값은 2입니다.
  • PROTOCOL: 프로브 시스템에서 상태 점검에 사용되는 프로토콜을 지정합니다. 자세한 내용은 HTTP, HTTPS, HTTP/2 성공 기준gRPC 성공 기준을 참조하세요. 이 매개변수는 필수항목입니다.
  • ENABLED: 로깅이 사용 설정 또는 중지되었는지 여부를 지정합니다.
  • PORT_SPECIFICATION: 상태 점검에서 고정 포트(USE_FIXED_PORT), 이름이 지정된 포트(USE_NAMED_PORT) 또는 제공 포트(USE_SERVING_PORT)를 사용하는지 지정합니다. 지정되지 않으면 상태 점검에서 portportName 필드에 지정된 동작을 수행합니다. port 또는 portName이 지정되지 않으면 이 필드의 기본값은 USE_SERVING_PORT입니다.
  • PATH: 프로브 시스템에서 HTTP, HTTPS 또는 HTTP2 상태 점검을 위해 연결해야 하는 request-path를 지정합니다. 이 매개변수를 생략하면 Google Cloud 기본값은 /입니다.
  • PORT: HealthCheckPolicy만 포트 번호를 사용하여 부하 분산기 상태 점검 포트 지정을 지원합니다. 이 매개변수를 생략하면 Google Cloud 기본값은 80입니다. 부하 분산기는 프로브를 포드의 IP 주소로 직접 전송하므로 서비스의 targetPort에서 containerPort를 참조하더라도 제공 포드의 containerPort와 일치하는 포트를 선택해야 합니다. 서비스의 targetPort에서 참조하는 containerPorts로 제한되지 않습니다.
  • PORT_NAME: InstanceGroup.NamedPort.name에 정의된 포트 이름을 지정합니다. portportName 모두 정의된 경우 Google Cloud는 port 값을 먼저 고려합니다.
  • HOST: 상태 점검 요청의 호스트 헤더 값입니다. 숫자 IP 주소가 허용되지 않는 경우를 제외하고 이 값에는 호스트 이름의 RFC 1123 정의가 사용됩니다. 지정하지 않거나 비워 두면 값이 기본적으로 상태 점검의 IP 주소로 지정됩니다.
  • REQUEST_PATH: 상태 점검 요청의 요청 경로를 지정합니다. 지정하지 않거나 비워두면 기본값은 /입니다.
  • RESPONSE: 응답 데이터의 시작 부분과 비교할 바이트를 지정합니다. 값을 지정하지 않거나 비워두면 GKE에서 응답을 정상으로 해석합니다. 응답 데이터는 ASCII여야 합니다.
  • PROXY_HEADER: 프록시 헤더 유형을 지정합니다. NONE 또는 PROXY_V1을 사용할 수 있습니다. 기본값은 NONE입니다.
  • GRPC_SERVICE_NAME: gRPC 서비스의 선택적인 이름입니다. 모든 서비스를 지정하려면 이 필드를 생략합니다.

HealthCheckPolicy 필드에 대한 자세한 내용은 healthChecks 참조를 확인하세요.

Google Cloud Armor 백엔드 보안 정책을 구성하여 백엔드 서비스 보호

이 섹션에서는 버전 1.24 이상을 실행하는 GKE 클러스터에서 사용할 수 있는 기능을 설명합니다.

백엔드 서비스를 보호하기 위해 GCPBackendPolicy에 보안 정책 이름을 추가하여 Google Cloud Armor 백엔드 보안 정책을 구성합니다. 기본적으로 게이트웨이에는 Google Cloud Armor 백엔드 보안 정책이 정의 및 연결되어 있지 않습니다.

GCPBackendPolicy에서 정책을 참조하기 전에 Google Cloud Armor 백엔드 보안 정책을 만들어야 합니다.

다음 GCPBackendPolicy 매니페스트는 example-security-policy라는 백엔드 보안 정책을 지정합니다.

서비스

apiVersion: networking.gke.io/v1
kind: GCPBackendPolicy
metadata:
  name: my-backend-policy
  namespace: lb-service-namespace
spec:
  default:
    securityPolicy: example-security-policy
  targetRef:
    group: ""
    kind: Service
    name: lb-service

멀티 클러스터 서비스

apiVersion: networking.gke.io/v1
kind: GCPBackendPolicy
metadata:
  name: my-backend-policy
  namespace: lb-service-namespace
spec:
  default:
    securityPolicy: example-security-policy
  targetRef:
    group: net.gke.io
    kind: ServiceImport
    name: lb-service

IAP 구성

이 섹션에서는 버전 1.24 이상을 실행하는 GKE 클러스터에서 사용할 수 있는 기능을 설명합니다.

IAP(Identity-Aware Proxy)는 HTTPRoute와 연결된 백엔드 서비스에 대해 액세스 제어 정책을 적용합니다. 이 시행을 통해 올바른 Identity and Access Management(IAM) 역할이 할당된 인증된 사용자 또는 애플리케이션만 이러한 백엔드 서비스에 액세스할 수 있습니다.

기본적으로 백엔드 서비스에는 IAP가 적용되지 않으므로, GCPBackendPolicy에서 IAP를 명시적으로 구성해야 합니다.

게이트웨이로 IAP를 구성하려면 다음을 수행합니다.

  1. GKE에 IAP 사용 설정: BackendConfig는 인그레스 배포의 경우에만 유효하므로 백엔드를 구성하지 마세요(BackendConfig 구성).

  2. IAP의 보안 비밀을 만듭니다.

    1. 사용자 인증 정보 페이지로 이동하세요. 버튼: 사용자 인증 정보 페이지로 이동

    2. 클라이언트 이름을 클릭하고 OAuth 클라이언트 파일을 다운로드합니다.

    3. OAuth 클라이언트 파일에서 클립보드에 OAuth 비밀번호를 복사합니다.

    4. iap-secret.txt라는 파일을 만듭니다.

    5. 다음 명령어를 사용하여 OAuth 비밀번호를 iap-secret.txt 파일에 붙여넣습니다.

      echo -n CLIENT_SECRET > iap-secret.txt
      kubectl create secret generic SECRET_NAME --from-file=key=iap-secret.txt
      
  3. 보안 비밀을 참조하는 IAP 정책을 지정하려면 다음 안내를 따르세요.

    1. 다음 GCPBackendPolicy 매니페스트를 만들고 각각 SECRET_NAMECLIENT_ID를 바꿉니다. 매니페스트를 backend-policy.yaml로 저장합니다.

      서비스

      apiVersion: networking.gke.io/v1
      kind: GCPBackendPolicy
      metadata:
        name: backend-policy
      spec:
        default:
          iap:
            enabled: true
            oauth2ClientSecret:
              name: SECRET_NAME
            clientID: CLIENT_ID
        targetRef:
          group: ""
          kind: Service
          name: lb-service
      

      멀티 클러스터 서비스

      apiVersion: networking.gke.io/v1
      kind: GCPBackendPolicy
      metadata:
        name: backend-policy
      spec:
        default:
          iap:
            enabled: true
            oauth2ClientSecret:
              name: SECRET_NAME
            clientID: CLIENT_ID
        targetRef:
          group: net.gke.io
          kind: ServiceImport
          name: lb-service
      
    2. backend-policy.yaml 매니페스트를 적용합니다.

      kubectl apply -f backend-policy.yaml
      
  4. 구성을 확인합니다

    1. IAP로 GCPBackendPolicy를 만든 후 정책이 적용되었는지 확인합니다.

      kubectl get gcpbackendpolicy
      

      출력은 다음과 비슷합니다.

      NAME             AGE
      backend-policy   45m
      
    2. 자세한 내용을 보려면 describe 명령어를 사용합니다.

      kubectl describe gcpbackendpolicy
      

      출력은 다음과 비슷합니다.

      Name:         backend-policy
      Namespace:    default
      Labels:       <none>
      Annotations:  <none>
      API Version:  networking.gke.io/v1
      Kind:         GCPBackendPolicy
      Metadata:
        Creation Timestamp:  2023-05-27T06:45:32Z
        Generation:          2
        Resource Version:    19780077
        UID:                 f4f60a3b-4bb2-4e12-8748-d3b310d9c8e5
      Spec:
        Default:
          Iap:
            Client ID:  441323991697-luotsrnpboij65ebfr13hlcpm5a4heke.apps.googleusercontent.com
            Enabled:    true
            oauth2ClientSecret:
              Name:  my-iap-secret
        Target Ref:
          Group:
          Kind:   Service
          Name:   lb-service
      Status:
        Conditions:
          Last Transition Time:  2023-05-27T06:48:25Z
          Message:
          Reason:                Attached
          Status:                True
          Type:                  Attached
      Events:
        Type     Reason  Age                 From                   Message
        ----     ------  ----                ----                   -------
        Normal   ADD     46m                 sc-gateway-controller  default/backend-policy
        Normal   SYNC    44s (x15 over 43m)  sc-gateway-controller  Application of GCPGatewayPolicy "default/backend-policy" was a success
      

백엔드 서비스 제한 시간 구성

이 섹션에서는 버전 1.24 이상을 실행하는 GKE 클러스터에서 사용할 수 있는 기능을 설명합니다.

다음 GCPBackendPolicy 매니페스트는 백엔드 서비스 제한 시간을 40초로 지정합니다. timeoutSec 필드의 기본값은 30초입니다.

서비스

apiVersion: networking.gke.io/v1
kind: GCPBackendPolicy
metadata:
  name: my-backend-policy
  namespace: lb-service-namespace
spec:
  default:
    timeoutSec: 40
  targetRef:
    group: ""
    kind: Service
    name: lb-service

멀티 클러스터 서비스

apiVersion: networking.gke.io/v1
kind: GCPBackendPolicy
metadata:
  name: my-backend-policy
  namespace: lb-service-namespace
spec:
  default:
    timeoutSec: 40
  targetRef:
    group: net.gke.io
    kind: ServiceImport
    name: lb-service

세션 어피니티 구성

이 섹션에서는 버전 1.24 이상을 실행하는 GKE 클러스터에서 사용할 수 있는 기능을 설명합니다.

다음 기준에 따라 세션 어피니티를 구성할 수 있습니다.

  • 클라이언트 IP 주소
  • 생성된 쿠키

서비스에 세션 어피니티를 구성하면 게이트웨이의 localityLbPolicy 설정이 MAGLEV로 설정됩니다.

GCPBackendPolicy에서 세션 어피니티 구성을 삭제하면 게이트웨이가 localityLbPolicy 설정을 기본값 ROUND_ROBIN으로 되돌립니다. 이 값은 부하 분산기에 연결된 GKE 관리형 백엔드 서비스에 자동으로 설정되며 gcloud CLI 명령어, UI 또는 Terraform의 출력에 반영되지 않습니다.

다음 GCPBackendPolicy 매니페스트는 클라이언트 IP 주소에 따라 세션 어피니티를 지정합니다.

서비스

apiVersion: networking.gke.io/v1
kind: GCPBackendPolicy
metadata:
  name: my-backend-policy
  namespace: lb-service-namespace
spec:
  default:
    sessionAffinity:
      type: CLIENT_IP
  targetRef:
    group: ""
    kind: Service
    name: lb-service

멀티 클러스터 서비스

apiVersion: networking.gke.io/v1
kind: GCPBackendPolicy
metadata:
  name: my-backend-policy
  namespace: lb-service-namespace
spec:
  default:
    sessionAffinity:
      type: CLIENT_IP
  targetRef:
    group: net.gke.io
    kind: ServiceImport
    name: lb-service

다음 GCPBackendPolicy 매니페스트는 생성된 쿠키에 따라 세션 어피니티를 지정하고 쿠키 TTL을 50초로 구성합니다.

서비스

apiVersion: networking.gke.io/v1
kind: GCPBackendPolicy
metadata:
  name: my-backend-policy
  namespace: lb-service-namespace
spec:
  default:
    sessionAffinity:
      type: GENERATED_COOKIE
      cookieTtlSec: 50
  targetRef:
    group: ""
    kind: Service
    name: lb-service

멀티 클러스터 서비스

apiVersion: networking.gke.io/v1
kind: GCPBackendPolicy
metadata:
  name: my-backend-policy
  namespace: lb-service-namespace
spec:
  default:
    sessionAffinity:
      type: GENERATED_COOKIE
      cookieTtlSec: 50
  targetRef:
    group: net.gke.io
    kind: ServiceImport
    name: lb-service

sessionAffinity.type, CLIENT_IP, CLIENT_IP_PROTO, CLIENT_IP_PORT_PROTO, GENERATED_COOKIE, HEADER_FIELD, HTTP_COOKIE, NONE에 다음 옵션을 사용할 수 있습니다.

연결 드레이닝 제한 시간 구성

이 섹션에서는 버전 1.24 이상을 실행하는 GKE 클러스터에서 사용할 수 있는 기능을 설명합니다.

GCPBackendPolicy를 사용하여 연결 드레이닝 제한 시간을 구성할 수 있습니다. 연결 드레이닝 제한 시간은 연결이 드레이닝될 때까지 기다리는 시간(초)입니다. 제한 시간을 0~3600초로 지정할 수 있습니다. 기본값은 0이며 이 경우 연결 드레이닝이 중지됩니다.

다음 GCPBackendPolicy 매니페스트는 연결 드레이닝 제한 시간을 60초로 지정합니다.

서비스

apiVersion: networking.gke.io/v1
kind: GCPBackendPolicy
metadata:
  name: my-backend-policy
  namespace: lb-service-namespace
spec:
  default:
    connectionDraining:
      drainingTimeoutSec: 60
  targetRef:
    group: ""
    kind: Service
    name: lb-service

멀티 클러스터 서비스

apiVersion: networking.gke.io/v1
kind: GCPBackendPolicy
metadata:
  name: my-backend-policy
  namespace: lb-service-namespace
spec:
  default:
    connectionDraining:
      drainingTimeoutSec: 60
  targetRef:
    group: net.gke.io
    kind: ServiceImport
    name: lb-service

지정된 제한 시간 동안 GKE는 삭제된 백엔드에 대한 기존 요청이 완료될 때까지 기다립니다. 부하 분산기는 새로운 요청을 삭제된 백엔드에 보내지 않습니다. 제한 시간에 도달하면 GKE는 백엔드에 남아있는 모든 연결을 닫습니다.

HTTP 액세스 로깅

이 섹션에서는 버전 1.24 이상을 실행하는 GKE 클러스터에서 사용할 수 있는 기능을 설명합니다.

기본적으로

  • 게이트웨이 컨트롤러는 클라이언트의 모든 HTTP 요청을 Cloud Logging에 로깅합니다.
  • 샘플링 레이트는 1,000,000이며, 이는 모든 요청이 로깅됨을 의미합니다.

다음 세 가지 방법으로 GCPBackendPolicy를 사용하여 게이트웨이에서 액세스 로깅을 사용 중지할 수 있습니다.

  • logging 섹션 없이 GCPBackendPolicy를 그대로 둘 수 있습니다.
  • logging.enabledfalse로 설정할 수 있습니다.
  • logging.enabledtrue로, logging.sampleRate0으로 설정할 수 있습니다.

액세스 로깅 샘플링 레이트를 구성할 수도 있습니다.

다음 GCPBackendPolicy 매니페스트는 액세스 로깅의 기본 샘플링 레이트를 수정하고 이를 지정된 서비스 리소스에 대한 HTTP 요청의 50%로 설정합니다.

서비스

apiVersion: networking.gke.io/v1
kind: GCPBackendPolicy
metadata:
  name: my-backend-policy
  namespace: lb-service-namespace
spec:
  default:
    logging:
      enabled: true
      sampleRate: 500000
  targetRef:
    group: ""
    kind: Service
    name: lb-service

멀티 클러스터 서비스

apiVersion: networking.gke.io/v1
kind: GCPBackendPolicy
metadata:
  name: my-backend-policy
  namespace: lb-service-namespace
spec:
  default:
    logging:
      enabled: true
      sampleRate: 500000
  targetRef:
    group: net.gke.io
    kind: ServiceImport
    name: lb-service

이 매니페스트에는 다음과 같은 필드가 있습니다.

  • enable: true: 액세스 로깅을 명시적으로 사용 설정합니다. Logging에서 로그를 사용할 수 있습니다.
  • sampleRate: 500000: 패킷의 50%가 로깅되도록 지정합니다. 0~1,000,000 사이의 값을 사용할 수 있습니다. GKE는 1,000,000으로 나누어 [0,1] 범위의 부동 소수점 값으로 변환합니다. 이 필드는 enabletrue로 설정된 경우에만 관련이 있습니다. sampleRate는 선택적 필드이지만 구성되는 경우 enable: true도 설정해야 합니다. enabletrue로 설정되었지만 sampleRate가 제공되지 않으면 GKE에서 enablefalse로 설정합니다.

문제 해결

동일한 Service에 연결된 여러 GCPBackendPolicy

증상:

Service 또는 ServiceImportGCPBackendPolicy를 연결할 때 다음 상태 조건이 발생할 수 있습니다.

status:
  conditions:
    - lastTransitionTime: "2023-09-26T20:18:03Z"
      message: conflicted with GCPBackendPolicy "[POLICY_NAME]" of higher precedence, hence not applied
      reason: Conflicted
      status: "False"
      type: Attached

이유:

이 상태 조건은 이미 GCPBackendPolicy가 연결된 Service 또는 ServiceImport에 두 번째 GCPBackendPolicy를 적용하려고 함을 나타냅니다.

동일한 Service 또는 ServiceImport에 연결된 여러 GCPBackendPolicy는 GKE 게이트웨이에서 지원되지 않습니다. 자세한 내용은 제한 및 한도를 참조하세요.

해결 방법:

모든 커스텀 구성을 포함하는 단일 GCPBackendPolicy를 구성하고 이를 Service 또는 ServiceImport에 연결합니다.

다음 단계