가드레일 문제 진단

가드레일 개요

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

일시적으로 가드레일 사용 중지

가드레일 검사를 사용 중지해야 하는 경우 Helm 명령어에 --no-hooks 플래그를 추가합니다. 다음 예시에서는 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