ADC 0.8 & 0.9 & 0.10의 새로운 기능은 무엇인가요?

Zeping Bai

Zeping Bai

May 31, 2024

Products

소개

ADC(APISIX Declarative CLI)API7.ai에서 도입한 선언적 구성 도구로, 사용자가 GitOps를 구현할 수 있도록 편리한 도구 세트를 제공합니다. 사용자는 이를 CI/CD 파이프라인에 쉽게 통합하여 전체 API 라이프사이클을 관리하고, API 업그레이드 및 릴리스를 완료할 수 있습니다. 0.7 버전 출시 이후, ADC는 0.8, 0.9, 0.10 세 가지 새로운 버전을 출시하며 기능, 성능, 사용자 경험 측면에서 최적화와 업데이트를 진행했습니다.

ADC의 새로운 기능

리소스 변경 감지기 Differ 개선

이 수정 사항은 0.8 및 0.9 버전에서 도입되었습니다.

리소스 변경 감지기 Differ의 새로운 버전인 v3를 도입하여 기능과 코드 품질 측면에서 상당한 개선이 이루어졌습니다.

  1. 새로운 Differ는 로컬 리소스에 대한 기본값 병합 메커니즘을 도입하여 서버 측의 기본값이 ADC의 리소스 변경 검사에 방해되지 않도록 합니다.

    클라이언트가 API7 또는 APISIX Admin API에 리소스 생성 요청을 보내면, 서버는 제출된 요청에 대해 스키마 검증을 수행합니다. 이 과정에서 클라이언트가 보내지 않았지만 스키마에 기본값이 표시된 일부 필드가 자동으로 제출된 리소스에 추가됩니다. 결과적으로 API에서 리소스를 다시 읽을 때 초기 제출과 달라집니다.

    이전 ADC 버전은 이러한 리소스를 "수정됨"으로 표시하고 Admin API에 업데이트 API 요청을 보냈습니다. 이 동작은 ADC에 일부 불확실성을 초래했으며, 이 문제는 Differ를 통해 해결되었습니다.

  2. 기본값 병합 메커니즘이 API7 백엔드에 구현되어, 사용자가 로컬 YAML 구성을 변경한 경우에만 리소스 차이를 수정 사항으로 간주합니다.

  3. Differ 감지 세분화 개선: ADC는 현재 리소스 본문과 플러그인 차원에서 별도로 리소스 변경 검사를 수행하여 검사 중 발생하는 이상 현상을 줄이는 데 도움을 줍니다.

  4. 코드 품질 최적화: 중복 코드를 단순화하여 가독성을 높이고 일부 버그를 수정했습니다.

리소스 필터

리소스 라벨과 리소스 유형을 기반으로 두 가지 리소스 필터링 메커니즘을 추가했습니다. 이를 통해 fetch, 차이 검사 및 동기화 작업 중 불필요한 리소스를 제외할 수 있습니다.

리소스 라벨 필터

이 기능은 0.8 버전에서 도입되었습니다.

이 필터는 리소스의 라벨 필드를 기반으로 필터링을 수행합니다. 사용자는 명령줄에서 --label-selector key=value 매개변수를 사용하여 필터를 활성화할 수 있습니다. 여러 필터 조건을 구성할 수 있으며, 이러한 규칙을 동시에 충족하는 원격 리소스만 존재하는 것으로 간주되고, 로컬 리소스에는 이러한 라벨이 자동으로 추가됩니다.

이를 통해 작은 범위 내에서 리소스 검사 및 동기화를 수행할 수 있어, CI/CD 파이프라인에서 실행되는 작업을 분할하고 수정할 필요가 없는 리소스를 실수로 동기화하여 손상시키는 것을 방지할 수 있습니다.

리소스 유형 필터

이 기능은 0.9 버전에서 도입되었습니다.

두 가지 새로운 명령줄 매개변수인 --include-resource-type <type>--exclude-resource-type <type>을 추가했습니다. 이 매개변수는 여러 번 구성할 수 있지만, 포함과 제외 매개변수는 상호 배타적입니다.

이 두 매개변수를 사용하여 현재 작업에서 특정 리소스 유형을 필터링할 수 있습니다. 예를 들어, include-resource-type을 사용하여 화이트리스트를 설정하고 작업에 포함할 리소스 유형을 선택할 수 있으며, exclude-resource-type은 작업에서 제외할 리소스 유형을 결정합니다.

이를 통해 플러그인 메타데이터 및 플러그인의 글로벌 규칙과 같이 자주 변경할 필요가 없는 리소스를 더 잘 처리할 수 있습니다.

명령줄 개선

이 개선 사항은 0.9 버전에서 도입되었습니다.

TLS 인증서 구성

명령줄에 다음과 같은 TLS 관련 매개변수를 추가했습니다:

  • --ca-cert-file 서버의 CA 인증서 파일 지정
  • --tls-skip-verify TLS 서버 인증서 검증 비활성화
  • --tls-client-cert-file--tls-client-key-file mTLS 클라이언트 인증서 파일 지정

이 매개변수들은 ADC가 안전한 암호화 연결을 설정하고 중간자 공격을 방지하는 데 도움을 줍니다.

타임아웃 제어

API 호출의 타임아웃 지속 시간을 제어하기 위해 --timeout <duration> 매개변수를 추가했습니다. 1m30s와 같은 구문을 지원합니다. Admin API 호출이 너무 오래 걸리거나 멈출 경우, 타임아웃 메커니즘이 작동하여 무한정 대기하는 것을 방지합니다.

디버그 모드

이 기능은 0.9 버전에서 도입되었습니다.

ADC가 내부적으로 리소스 작업을 수행할 때 많은 API를 호출해야 합니다. 때로는 이러한 API 호출을 확인하여 올바르게 전송되었는지 분석하거나 서버의 응답이 예상대로인지 확인해야 할 수 있습니다. 패킷 캡처를 사용하여 이를 달성할 수 있지만, 작업이 편리하지 않고 TLS가 활성화된 경우 상당한 어려움이 있습니다.

따라서 ADC에 내장된 디버그 모드를 추가했습니다. 이 모드는 --verbose <integer> 매개변수를 사용하여 활성화할 수 있습니다. 이 매개변수를 2로 설정하면 ADC는 각 내부 API 호출의 요청 및 응답 부분을 출력하여 디버깅에 도움을 줍니다.

이 매개변수는 로그를 숨기는 데에도 사용할 수 있습니다. 이 매개변수를 0으로 설정하면 ADC는 오류를 제외한 모든 일반 로그를 숨깁니다.

원격 리소스 처리 강화

이 기능은 0.9 버전에서 도입되었습니다.

ADC는 서비스, 경로 등을 구성하는 유일한 방법이 아니므로, 사용자는 API7 Enterprise 대시보드를 통해 간단한 작업으로도 이를 달성할 수 있습니다. 이로 인해 문제가 발생했습니다: 대시보드에서의 작업은 무작위로 생성된 리소스 ID를 사용하는 반면, ADC는 YAML 구성의 리소스 이름을 사용하여 고정된 리소스 ID를 생성하여 정확한 리소스 위치를 파악합니다.

이는 사용자가 대시보드에서 리소스를 생성한 경우, ADC가 리소스 ID로 이를 찾을 수 없음을 의미합니다. ADC는 대시보드에서 생성된 리소스를 수정하거나 삭제할 수 없지만, 이러한 리소스는 여전히 변경 감지에 나타나지만 올바르게 작업할 수 없습니다.

따라서 API7 백엔드 ADC의 관련 로직을 최적화했습니다. 원격과 로컬 모두 동일한 이름의 리소스를 포함하지만 ID가 일치하지 않는 경우, ADC는 원격 리소스를 올바르게 삭제하고 로컬 구성을 기반으로 새 리소스를 생성할 수 있습니다. 이 경우 ID는 ADC가 리소스 이름을 기반으로 생성하며, 이후 리소스 조회에 사용할 수 있습니다. API7 대시보드 사용자는 영향을 받지 않으며, ADC가 생성한 리소스는 여전히 대시보드에서 볼 수 있습니다.

OpenAPI 변환기에서 ADC 확장 필드 지원

이 기능은 0.10 버전에서 도입되었습니다.

OpenAPI에서 ADC를 거쳐 API7로 이어지는 일관된 파이프라인을 구축하기 위해, OpenAPI 변환기는 우리의 요구에 따라 ADC YAML 구성 파일에 필요한 필드를 주입해야 합니다.

예를 들어, 서비스의 업스트림에서 pass_host 필드를 수정하려면, 이전에는 변환기를 사용하여 OpenAPI를 ADC 구성 파일로 변환한 후, pass_host 필드를 수동으로 수정하고, 수정된 파일을 Git 저장소에 제출하여 CI/CD 파이프라인이 ADC 동기화를 실행하도록 해야 했습니다. 이 과정은 일관성이 없고 많은 수동 개입이 필요했습니다.

이제 도입된 x-adc 시리즈 확장을 통해, 사용자는 OpenAPI 문서의 특정 위치에 확장 필드를 작성하기만 하면, ADC가 생성된 구성 파일에 이러한 필드를 올바르게 작성합니다. 이러한 확장을 통해 사용자는 OpenAPI에서 ADC 구성의 모든 내용을 직접 수정할 수 있습니다. 예를 들어, 라벨 추가, 플러그인 추가, 서비스/업스트림/경로의 기본 구성 재정의 등이 가능합니다.

결과적으로, 단 하나의 OpenAPI 파일만 유지하면 OpenAPI-ADC-API7 파이프라인을 원스톱으로 구현할 수 있어, API 게이트웨이 구성의 GitOps 워크플로우를 크게 단순화합니다.

결론

API7.ai에서 출시한 선언적 구성 도구 ADC는 기업이 API 게이트웨이의 GitOps 관리를 실현할 수 있도록 도와줍니다. 새로운 0.8, 0.9, 0.10 버전에서 이 도구는 기능적으로 최적화 및 업그레이드되었으며, 리소스 변경 모니터링 및 필터링과 같은 기능이 추가되었습니다. 이러한 새로운 기능은 전체 API 라이프사이클 관리에 새로운 동력을 불어넣습니다.

이러한 새로운 기능은 ADC가 기업의 API 게이트웨이 GitOps 관리 요구를 더 잘 충족할 수 있도록 하여, API 관리의 효율성과 유연성을 향상시킵니다.

Tags: