가드레일 문제 진단

가드레일 개요

Apigee Hybrid 가드레일은 문제가 Hybrid 인스턴스에 영향을 미치기 전에 고객에게 잠재적인 문제를 알리는 메커니즘입니다. 즉, 명령어가 Hybrid 인스턴스의 안정성을 위협하는 경우 Hybrid 가드레일은 해당 명령어를 트랙에서 중지합니다. 구성이 잘못되었든 리소스가 부족하든 Hybrid 가드레일은 문제의 위험이 제거될 때까지 Hybrid 인스턴스가 변경되지 않도록 합니다. 이를 통해 고객은 일반적으로 해결하는 데 몇 시간이나 며칠이 걸리는 문제에 시간을 할애하지 않아도 됩니다.

Apigee Hybrid에서 가드레일 사용

Hybrid 가드레일을 사용하려면 Hybrid 설치 안내에 설명된 것과 동일한 Hybrid Helm 설치 또는 Hybrid Helm 업그레이드 명령어를 실행합니다. 가드레일을 실행하는 데 추가 명령어가 필요하지 않습니다.

Apigee Hybrid용 Helm 명령어를 실행하면 helm 명령어가 Hybrid 인스턴스에 구성을 적용하기 전에 다음 두 가지 작업이 수행됩니다.

  • Helm이 적용된 구성을 사용하여 임시 가드레일 포드를 만듭니다. 가드레일 포드가 정상 상태로 가동되면 포드는 적용된 구성에 대해 Hybrid 인스턴스를 테스트합니다. 테스트가 통과하면 가드레일 포드가 종료되고 구성은 Apigee Hybrid 인스턴스에 적용됩니다.
  • 테스트에 실패하면 포드 진단을 위해 가드레일 포드가 비정상 상태로 남습니다. Helm 명령어가 가드레일 포드가 실패했음을 보고하는 오류 메시지를 표시합니다.

다음 예시에서는 apigee-datastore 구성요소를 설치할 때 가드레일을 사용하여 Hybrid 인스턴스에서 Apigee 제어 영역으로의 네트워크 연결을 테스트하는 방법을 보여줍니다. 모든 Apigee Hybrid 구성요소에 같은 시퀀스를 사용할 수 있습니다.

다음 명령어를 사용하여 apigee-datastore 구성요소를 설치합니다.

helm upgrade datastore apigee-datastore/ \
  --install \
  --namespace apigee \
  --atomic \
  -f overrides.yaml

즉시 오류가 발생하면 Helm 명령어가 다음 예시와 같이 가드레일 검사가 실패했음을 나타내는 오류 메시지도 표시합니다.

 helm upgrade datastore apigee-datastore/ \
  --install \
  --namespace apigee \
  -f ../my-overrides.yaml

  . . .
    Error: UPGRADE FAILED: pre-upgrade hooks failed: 1 error occurred:
      * pod apigee-hybrid-helm-guardrail-datastore failed

어떤 검사가 실패했는지와 그 이유를 확인하려면 다음 예시와 같이 가드레일 포드 로그를 확인합니다.

kubectl logs -n apigee apigee-hybrid-helm-guardrail-datastore
{"level":"INFO","timestamp":"2024-02-01T20:28:55.934Z","msg":"logging enabled","log-level":"INFO"}
{"level":"INFO","timestamp":"2024-02-01T20:28:55.935Z","msg":"","checkpoint":"upgrade","component":"apigee-datastore"}
{"level":"INFO","timestamp":"2024-02-01T20:28:55.935Z","msg":"initiating pre-install checks"}
{"level":"INFO","timestamp":"2024-02-01T20:28:55.935Z","msg":"check validation starting...","check":"controlplane_connectivity"}
{"level":"ERROR","timestamp":"2024-02-01T20:28:55.961Z","msg":"connectivity test failed","check":"controlplane_connectivity","host":"https://apigee.googleapis.com","error":"Get \"https://apigee.googleapis.com\": dial tcp: lookup apigee.googleapis.com on 10.92.0.10:53: no such host"}

이 예시에서 실제 테스트 실패 메시지는 다음 부분입니다.

{"level":"ERROR","timestamp":"2024-02-01T20:28:55.961Z","msg":"connectivity test failed","check":"controlplane_connectivity","host":"https://apigee.googleapis.com","error":"Get \"https://apigee.googleapis.com\": dial tcp: lookup apigee.googleapis.com on 10.92.0.10:53: no such host"}

Helm 명령어를 실행하면 가드레일 포드가 자동으로 프로비저닝됩니다. Apigee 컨트롤 플레인 연결 테스트가 통과하면 실행 종료 시에 가드레일 포드가 종료됩니다.

helm install 명령어를 실행한 후에 포드 상태를 빠르게 확인합니다. 다음 출력 예시는 정상 상태의 가드레일 포드를 보여줍니다. 즉, 제어 영역 연결 테스트를 통과했습니다.

kubectl get pods -n apigee -w
NAME                                      READY    STATUS             RESTARTS    AGE
apigee-hybrid-helm-guardrail-datastore    0/1      Pending            0           0s
apigee-hybrid-helm-guardrail-datastore    0/1      Pending            0           1s
apigee-hybrid-helm-guardrail-datastore    0/1      ContainerCreating  0           1s
apigee-hybrid-helm-guardrail-datastore    0/1      Completed          0           2s
apigee-hybrid-helm-guardrail-datastore    0/1      Completed          0           3s
apigee-hybrid-helm-guardrail-datastore    0/1      Terminating        0           3s
apigee-hybrid-helm-guardrail-datastore    0/1      Terminating        0           3s

Apigee 제어 영역 연결 테스트에 실패하면 가드레일 포드가 다음 출력 예시와 비슷한 오류 상태로 유지됩니다.

kubectl get pods -n apigee -w
NAME                                      READY    STATUS             RESTARTS    AGE
apigee-hybrid-helm-guardrail-datastore    0/1      Pending            0           0s
apigee-hybrid-helm-guardrail-datastore    0/1      Pending            0           0s
apigee-hybrid-helm-guardrail-datastore    0/1      ContainerCreating  0           0s
apigee-hybrid-helm-guardrail-datastore    0/1      Error              0           4s
apigee-hybrid-helm-guardrail-datastore    0/1      Error              0           5s
apigee-hybrid-helm-guardrail-datastore    0/1      Error              0           6s

가드레일 일시적으로 중지

가드레일 검사를 중지해야 하는 경우 --no-hooks 플래그를 Helm 명령어에 추가합니다. 다음 예시에서는 Helm 명령어의 --no-hooks 플래그를 보여줍니다.

helm upgrade datastore apigee-datastore/ \
  --install \
  --namespace apigee \
  -f ../my-overrides.yaml \
  --no-hooks

재정의 파일의 가드레일 구성

Apigee Hybrid 버전 1.12부터 각 차트에 가드레일이 기본적으로 구성됩니다. overrides 파일에서 이미지 URL, 태그, 이미지 가져오기 정책을 재정의할 수 있습니다.

예를 들어 다음 가드레일 이미지 URL, 태그, 가져오기 정책이 재정의 파일에 추가됩니다.

# Apigee Ingressgateway
ingressGateway:
  image:
    pullPolicy: Always

## NOTE: The Guardrails config is below. The ingressgateway config above is for position reference only and is NOT required for Guardrails config.

# Apigee Guardrails
guardrails:
  image:
    url: "gcr.io/ng-hybrid/guardrails/apigee-watcher"
    tag: "12345_6789abcde"
    pullPolicy: Always

가드레일에서 Kubernetes 톨러레이션(toleration) 사용

overrides 파일에서 톨러레이션(toleration)을 가드레일에 추가할 수도 있습니다. 가드레일 overrides 구성에 톨러레이션(toleration)이 정의되어 있지 않으면 가드레일은 전역적으로 정의된 톨러레이션(toleration)을 사용합니다.

예를 들어 overrides 파일의 가드레일 섹션에만 톨러레이션(toleration)을 포함하려면 다음 스탠자와 유사한 내용을 추가하면 됩니다.

  # Apigee Guardrails
  guardrails:
    image:
      url: "gcr.io/ng-hybrid/guardrails/apigee-watcher"
      tag: "12345_6789abcde"
      pullPolicy: Always
    tolerations:
    - key: "say"
      operator: "Equal"
      value: "taunt"
      effect: "NoSchedule"