Gateway Management
API 게이트웨이와 게이트웨이 관리란 무엇인가요?
API Gateway는 API 트래픽을 위한 중앙 관리 지점입니다. 클라이언트 요청을 적절한 백엔드 서비스로 라우팅하고, 필요에 따라 요청 및 응답을 변환하며, 보안 정책을 시행하고, 트래픽을 모니터링하며, 전반적인 API 신뢰성을 보장합니다.
API 게이트웨이의 주요 기능
- Routing: 클라이언트 요청을 적절한 백엔드 서비스로 안내합니다.
- Transformation: 필요에 따라 요청 또는 응답 형식을 변환합니다.
- Authentication & Authorization: 클라이언트 자격 증명을 검증하고 접근 권한을 부여합니다.
- Traffic Control: 백엔드 과부하를 방지하기 위해 API 트래픽을 관리하고 제한합니다.
- Logging & Monitoring: 추적 및 분석을 위한 API 사용 데이터를 기록합니다.
- Security & Protection: 악의적인 공격을 차단하고 API 보안을 강화합니다.
APIM에서는 Kong API 게이트웨이를 사용하고 Kubernetes (K8s) 배포로 프로비저닝합니다.
게이트웨이 관리 메뉴
APIM의 Gateway Management 메뉴를 통해 사용자는 다음을 수행할 수 있습니다:
- 게이트웨이 목록을 보고 관리합니다.
- 개별 게이트웨이의 상태를 모니터링합니다.
- 프로젝트별로 게이트웨이를 쿼리, 생성, 업데이트 및 삭제합니다.
- 여러 게이트웨이 URL을 관리합니다.
- 노드 친화성, 허용 및 토폴로지 설정을 구성합니다.
- HTTPS 보안을 위한 TLS 인증서를 설정합니다.
- 메타데이터를 주석/레이블을 통해 추가합니다 (K8s Ingress 주석/레이블).
각 Gateway URL는 API 요청에 사용되는 엔드포인트를 나타냅니다.
예를 들어, API에 https://api.company.com/path로 접근하면, 게이트웨이 URL은 api.company.com입니다.
게이트웨이 목록 화면
Gateway List 화면은 프로젝트 내 모든 게이트웨이에 대한 개요를 제공하여 사용자가 다음을 수행할 수 있게 합니다:
- 모든 게이트웨이를 한눈에 봅니다.
- CPU, 메모리 및 복제본 구성을 확인합니다.
- 각 게이트웨이의 실행 또는 대기 상태를 모니터링합니다.
- 특정 게이트웨이를 검색하거나 새로 생성합니다.
게이트웨이 생성
새로운 게이트웨이를 생성하려면 다음 단계를 따르세요:
게이트웨이 관리 메뉴로 이동합니다.
"게이트웨이 생성" 클릭
프로젝트 선택
게이트웨이가 관리될 프로젝트를 선택합니다. 프로젝트 생성 방법에 대한 지침은 Tenant Manager Console/Create a Project. 을 참조하세요.
게이트웨이 설정 구성
Gateway Configuration 섹션에서는 게이트웨이를 세부적으로 사용자 정의할 수 있습니다. 아래는 주요 필드입니다:
Gateway Type- Purpose: API 게이트웨이 유형을 정의합니다.
- Mandatory: 예
- Input Instructions: 프로젝트의 게이트웨이 유형과 일치합니다. 변경할 수 없습니다.
- Purpose: 게이트웨이에 대한 고유 식별자입니다.
- Mandatory: 예
- Input Instructions: 영어 문자, 숫자, spaces, 하이픈 ‘-’, 밑줄 ‘_’, 또는 이중 콤마 ‘:’만 사용할 수 있습니다. 영어 문자로 시작해야 합니다.
- Purpose: 게이트웨이 인스턴스를 식별합니다.
- Mandatory: 예
- Input Instructions: 게이트웨이 이름을 기반으로 자동으로 채워집니다.
- Purpose: 게이트웨이에 대한 추가 세부정보를 제공합니다.
- Mandatory: 아니요
- Input Instructions: 짧은 설명을 입력합니다.
- Purpose: 게이트웨이를 필터링하고 검색하는 데 도움이 됩니다.
- Mandatory: 아니요
- Input Instructions: 게이트웨이는 여러 태그를 가질 수 있습니다. Enter 키를 눌러 태그를 입력합니다..
- Purpose: 게이트웨이에 대한 리소스를 할당합니다.
- Mandatory: 예
- Input Instructions: 슬라이더를 사용하여 조정합니다. 값 범위는 500에서 16000 m/mi입니다.
- Purpose: 게이트웨이가 사용하는 내부 데이터베이스에 대한 리소스를 할당합니다.
- Mandatory: 예
- Input Instructions: 슬라이더를 사용하여 조정합니다. 값 범위는 500에서 16000 m/mi입니다.
- Purpose: 배포 후 게이트웨이 리소스 할당을 자동으로 조정합니다.
- Mandatory: 예
- Instructions: 자동 조정을 켜기 위한 토글입니다. 켜지면 최소 복제본, 최대 복제본, CPU 사용량, 메모리 사용량에 대한 자동 조정 값을 구성합니다.
- Purpose: Kubernetes에서 게이트웨이가 실행되는 위치를 결정합니다.
- Mandatory: 예
- Input Instructions: 드롭다운 목록에서 네임스페이스를 선택합니다.
- Purpose: 게이트웨이에 대한 스토리지를 프로비저닝하는 방법을 정의합니다.
- Mandatory: 예
- Input Instructions: 드롭다운 목록에서 스토리지 클래스를 선택합니다.
- Purpose: 게이트웨이에 대한 스토리지 할당을 지정합니다.
- Mandatory: 예
- Input Instructions: 5에서 500 (Gi) 사이의 값을 입력합니다.
- Purpose: Kong 프록시의 서비스 유형을 결정합니다.
- Mandatory: 예
- Input Instructions: ClusterIP, NodePort, LoadBalancer 중 하나를 선택합니다. NodePort 또는 LoadBalancer가 선택되면 사용자가 Kong 프록시 서비스 NodePort 값을 입력해야 합니다 (30000에서 32767 사이).
- Purpose: 친화성은 게이트웨이 포드가 스케줄링될 노드를 제어하는 데 사용되며, 노드 레이블과 일치합니다.
- Mandatory: 켜져 있으면 예입니다.
- Input Instructions: 친화성을 켜기 위해 토글을 활성화합니다. 그런 다음 노드 레이블에 대한 키와 값을 제공합니다. 이는 nodeAffinity 규칙으로 Kubernetes에서 requiredDuringSchedulingIgnoredDuringExecution을 사용하여 변환됩니다. 예를 들어:
nodeAffinity:
- Purpose: 허용은 게이트웨이 포드가 특정 작업 부하를 위해 표시된(오염된) 노드에 스케줄링될 수 있도록 합니다.
- Mandatory: 켜져 있으면 예입니다.
- Input Instructions: 켜진 후, 다음을 입력하십시오:
- 연산자: Equal 또는 Exists 중에서 선택하십시오. Equal: 키와 값이 정확히 일치해야 합니다. Exists: 키만 존재하면 되며, 값은 필요하지 않습니다.
- 키와 값: 오염 키와 값을 제공하십시오 (연산자가 Exists인 경우 값은 선택 사항입니다).
tolerations:
- effect: NoSchedule
key: "tolerationKey"
operator: "Equal" 또는 Exists
value: "tolerationValue"
- Purpose: 토폴로지 분산 제약 조건은 게이트웨이 포드가 실패 도메인(영역 또는 노드와 같은) 전반에 고르게 분산되도록 하여 복원력과 가용성을 향상시킵니다.
- Mandatory: 켜져 있으면 예입니다.
- Input Instructions: 켜진 후, 다음을 입력하십시오:
- Max Skew: 토폴로지 도메인 간의 게이트웨이 포드 수의 최대 허용 차이 (예: 1로 설정하면, 각 영역의 포드 수는 1을 초과하여 다를 수 없습니다).
- When Unsatisfiable: 다음 중 하나를 선택하십시오: ScheduleAnyway (기본값): 분산 제약 조건이 완전히 충족되지 않더라도 여전히 스케줄링을 허용합니다; DoNotSchedule: 제약 조건이 실패하면 포드 스케줄링을 차단합니다; DoNotScheduleIfNotSatisfied: 분산 조건이 충족되지 않을 경우에만 스케줄링을 제한하는 새로운 전략입니다.
이와 매핑되는 예제 Kubernetes 규칙:
topologySpreadConstraints:
- maxSkew: 1
topologyKey: topology.kubernetes.io/zone
whenUnsatisfiable: ScheduleAnyway
labelSelector:
matchLabels:
app.kubernetes.io/instance: test-kong
- Purpose: 내부 Redis 인스턴스를 캐싱을 위해 허용합니다.
- Mandatory: 켜져 있으면 예입니다.
- Input Instructions: 켜기/끄기. 켜져 있으면, 게이트웨이가 배포될 때 기본 Redis가 설치됩니다. 꺼져 있으면, 사용자는 APIM Redis가 Redis를 사용하는 정책(속도 제한, jwt 블랙리스트, OIDC)을 지원하지 않음을 알게 됩니다. 사용자는 꺼짐으로 전환을 계속하기 위해 프롬프트에서 확인해야 합니다.
- Purpose: Fluent Bit은 게이트웨이 컨테이너에서 로그를 수집, 필터링 및 전달하는 경량 로그 프로세서입니다.
- Mandatory: 아니요
- Input Instructions: 활성화되면, 추가로 다음 중 하나의 목적지를 선택할 수 있습니다:
- OpenTelemetry: OpenTelemetry 에이전트를 사용하여 로그 및 원거리 데이터를 전달합니다.
- Elasticsearch: Elasticsearch 클러스터에 로그를 전달하여 인덱싱 및 검색을 수행합니다.
참고: 이러한 옵션 중 하나만 활성화될 수 있습니다. 하나를 활성화하면 다른 하나가 이미 활성화되어 있는 경우, 현재 활성화된 것을 비활성화하라는 확인 프롬프트가 나타납니다.
- Purpose: 이 필드는 성능이나 동작을 미세 조정해야 할 경우, 원시 구성을 JSON 형식으로 제공하여 Kong Gateway 런타임에 고급 저수준 구성을 적용할 수 있도록 합니다.
- Mandatory: 켜져 있으면 예입니다.
- Input Instructions: 켜진 후, 사용자 정의 Kong 런타임 설정을 입력할 수 있는 JSON 편집기가 나타납니다.
예시:
"upstream_keepalive_idle_timeout": 60,
"upstream_keepalive_max_requests": 100000,
"nginx_http_keepalive_requests": 100000,
"upstream_keepalive_pool_size": 1024
참고: 잘못된 구성은 게이트웨이의 불안정한 동작을 초래할 수 있습니다. 변경 사항을 적용하기 전에 Kong 문서 또는 플랫폼 관리자에게 문의하십시오.
게이트웨이 구성은 아래 표에 요약되어 있습니다:
Field Name | Purpose | Input Notes | Mandatory |
---|---|---|---|
게이트웨이 유형 | API 게이트웨이 유형을 정의합니다. | 프로젝트의 게이트웨이 유형과 일치합니다. 변경할 수 없습니다. | 예. 기본값은 kong입니다. |
게이트웨이 이름 | 게이트웨이에 대한 고유 식별자입니다. | 영어 문자, 숫자, 하이픈 ‘-’, 밑줄 ‘_’, 또는 이중 콜론 ‘:’만 사용할 수 있습니다. 영어 문자로 시작해야 합니다. | 예 |
게이트웨이 인스턴스 이름 | 게이트웨이 인스턴스를 식별합니다. | 게이트웨이 이름을 기반으로 자동으로 채워집니다. | 예 |
게이트웨이 설명 | 게이트웨이에 대한 추가 세부정보를 제공합니다. | 짧은 설명을 입력하십시오. | 아니요 |
게이트웨이 태그 | 게이트웨이를 필터링하고 검색하는 데 도움이 됩니다. | 게이트웨이는 여러 태그를 가질 수 있습니다. Enter를 눌러 태그를 입력하십시오.. | 아니요 |
게이트웨이 CPU/메모리 | 게이트웨이에 대한 리소스를 할당합니다. | 슬라이더를 사용하여 조정합니다. 값 범위는 500에서 16000 m/mi입니다. | 예 |
데이터베이스 CPU/메모리 | 게이트웨이가 사용하는 내부 데이터베이스에 대한 리소스를 할당합니다. | 슬라이더를 사용하여 조정합니다. 값 범위는 500에서 16000 m/mi입니다. | 예 |
게이트웨이 자동 확장 | 배포 후 자동 포드 리소스 확장을 활성화합니다. | 켜기/끄기. 켜져 있으면, 구성: 최소 복제본, 최대 복제본, CPU 임계값 (%), 메모리 임계값 (%) | 켜져 있으면 예 |
Kong 네임스페이스 | Kubernetes에서 게이트웨이가 실행되는 위치를 결정합니다. | 드롭다운 목록에서 네임스페이스를 선택합니다. | 예 |
Kong 스토리지 클래스 | 게이트웨이에 대한 스토리지 프로비저닝 방법을 정의합니다. | 드롭다운 목록에서 스토리지 클래스를 선택합니다. | 예 |
스토리지 용량 | 게이트웨이에 대한 스토리지 할당을 지정합니다. | 5에서 500 (Gi) 사이의 값을 입력하십시오. | 예 |
Kong 프록시 서비스 유형 | 외부 액세스를 위한 Kong 프록시의 서비스 유형을 정의합니다. | ClusterIP, NodePort 또는 LoadBalancer 중에서 선택합니다. 기본값은 ClusterIP입니다. | 예 |
친화성 | 일치하는 레이블이 있는 노드에 게이트웨이 포드를 스케줄링합니다. | 켜기/끄기. 켜져 있으면, 노드 레이블에 대한 키와 값을 입력하십시오. | 켜져 있으면 예 |
관용 | 오염된 노드에서 게이트웨이 포드가 실행되도록 허용합니다. | 켜기/끄기. 켜져 있으면, 연산자 선택: Equal 또는 Exists. 키와 선택적 값을 입력하십시오. | 켜져 있으면 예 |
토폴로지 분산 | 가용성을 높이기 위해 영역 전반에 포드를 고르게 분산합니다. | 켜기/끄기. 켜져 있으면, 입력: 최대 편차 (예: 1). 충족되지 않을 경우 선택: ScheduleAnyway, DoNotSchedule, DoNotScheduleIfNotSatisfied 중에서 선택합니다. | 켜져 있으면 예 |
내부 Redis | 내부 Redis 인스턴스를 캐싱을 위해 허용합니다. | 켜기/끄기. 켜져 있으면, 게이트웨이가 배포될 때 기본 Redis가 설치됩니다. | 켜져 있으면 예 |
Fluent Bit | 메트릭 수집을 위한 OpenTelemetry 에이전트 또는 로그 수집을 위한 Elasticsearch를 활성화합니다. | OpenTelemetry 또는 Elasticsearch 중에서만 선택할 수 있습니다. | 켜져 있으면 예 |
Kong 구성 | Kong 구성을 수동으로 재정의할 수 있도록 합니다. | 편집기를 활성화하고 유효한 JSON을 입력하려면 켜기. | 켜져 있으면 예 |
생성 완료
CREATE A GATEWAY 버튼을 클릭하여 생성을 완료하고 게이트웨이 구성을 저장하십시오.
게이트웨이 URL 추가 및 관리
게이트웨이 URL 구성은 사용자가 API 게이트웨이에 대한 하나 이상의 공개 도메인을 정의할 수 있도록 합니다. 또한 HTTPS를 위한 TLS 인증서, API 라우팅을 위한 글로벌 기본 경로 및 주석을 통한 추가 메타데이터를 지원합니다. 각 게이트웨이는 API 게이트웨이에 접근하는 방법을 정의하는 여러 게이트웨이 URL을 가질 수 있습니다.
게이트웨이 URL을 추가하려면, 사용자는 게이트웨이 관리 화면에 나열된 생성된 게이트웨이를 클릭하여 게이트웨이 수정 화면으로 들어갈 수 있습니다.
거기에서 사용자는 아래에 게이트웨이 URL 구성 섹션을 찾을 수 있습니다.
아래는 게이트웨이 URL을 생성하는 단계입니다:
URL 생성하기
여러 개의 URL을 생성하려면 ADDITION을 클릭하세요. URL을 구성할 새로운 블록이 아래에 생성됩니다.
게이트웨이 URL 구성하기
게이트웨이 URL을 구성하기 위한 주요 필드는 다음과 같습니다:
Gateway URL- Purpose: 게이트웨이에 접근할 수 있는 공개 도메인(s)을 정의합니다. 사용자가 사용 중인 게이트웨이 URL을 변경하면 기존 API가 제대로 호출되지 않을 수 있습니다.
- Mandatory: 예
- Input Instructions: 유효한 도메인을 입력하세요.
- Example:
your.domain.com
your.domain.com:8443
- Purpose: 이 게이트웨이 아래의 모든 API에 대한 공통 접두사를 설정합니다. 정의된 경우, 이 게이트웨이 아래의 모든 API는 이 접두사를 상속받습니다. 사용 중에 Basepath가 변경되면 기존 API가 제대로 호출되지 않을 수 있습니다.
- Mandatory: 예
- Input Instructions: 기본 경로를 입력하세요. /로 두면 루트가 사용됩니다.
- Example:
/ /apim
- Purpose: HTTPS 통신을 활성화하기 위해 SSL 인증서를 제공하고 TLS 인증서를 인증하기 위해 tls.key 파일을 포함합니다. 게이트웨이 URL과 통신할 때 HTTPS만 허용하는 네트워크 정책이 적용되면 사용자는 HTTPS를 켜야 합니다. 사용자가 K8s Secret로 TLS 인증서를 등록하고 K8s Ingress를 통해 TLS 인증을 처리하는 경우, tls.crt/tls.key 값을 입력해야 합니다.
- Mandatory: 의존
- Input Instructions: PEM 형식으로 인증서 내용을 붙여넣습니다. 안전한 HTTPS 연결을 위해 필요합니다.
- Purpose: 이 게이트웨이 URL 구성에 사용할 인그레스 컨트롤러를 지정합니다.
- Mandatory: 예
- Input Instructions: 드롭다운에서 인그레스 클래스를 선택하세요. 사용 가능한 옵션은 다음과 같을 수 있습니다:
- nginx (기본값)
- alb
- appsec-kong
이 설정은 선택한 인그레스 컨트롤러를 통해 게이트웨이 URL을 라우팅합니다.
- Purpose: 이 게이트웨이 URL에 대해 생성된 인그레스 리소스에 Kubernetes 레이블을 추가합니다. 분류 또는 자동화 목적으로 유용합니다.
- Mandatory: 아니요
- Input Instructions: 하나 이상의 키-값 쌍을 입력하세요. 이 레이블은 생성된 인그레스 객체에 적용됩니다. 여러 항목을 추가하려면 더하기 버튼을 사용하고 추가된 항목을 제거하려면 빼기 버튼을 사용하세요.
- Purpose: 고급 구성을 위한 Kubernetes 인그레스 주석을 추가합니다. 예를 들어 사용자 정의 시간 초과, 헤더 조작 또는 컨트롤러 특정 옵션 등이 있습니다.
- Mandatory: 아니요
- Input Instructions: 두 가지 모드를 사용하여 주석을 입력할 수 있습니다:
폼 모드 (JSON 토글 OFF): 각 주석에 대해 키와 값을 수동으로 입력합니다. 시스템 제약에 따라 일부 필드는 편집이 잠길 수 있습니다. 더하기 버튼을 클릭하여 여러 주석을 추가하거나 빼기 버튼을 클릭하여 추가된 주석을 제거할 수 있습니다. 최소한 하나의 주석을 유지해야 합니다.
예시:
키: [nginx.ingress.kubernetes.io/proxy-connect-timeout](http://nginx.ingress.kubernetes.io/proxy-connect-timeout)
값: more_clear_headers \"server\
JSON 모드 (JSON 토글 ON): 편집기에서 키-값 JSON 객체 배열로 주석을 입력합니다.
예시:
"key": "[nginx.ingress.kubernetes.io/configuration-snippet](http://nginx.ingress.kubernetes.io/configuration-snippet)",
"value": "more_clear_headers \"server\";more_clear_headers \"via\";"
게이트웨이 URL 구성은 아래 표에 요약되어 있습니다:
Field Name | Purpose | Input Notes |
---|---|---|
게이트웨이 URL | 게이트웨이에 접근할 수 있는 공개 도메인(s)을 정의합니다. 사용자가 사용 중인 게이트웨이 URL을 변경하면 기존 API가 제대로 호출되지 않을 수 있습니다. | 유효한 도메인을 입력하세요 (예: api.example.com). 필수 필드. |
전역 BasePath | 이 게이트웨이 아래의 모든 API에 대한 공통 접두사를 설정합니다. 정의된 경우, 이 게이트웨이 아래의 모든 API는 이 접두사를 상속받습니다. | 기본 경로를 입력하세요 (예: /api). /로 두면 루트가 사용됩니다. |
TLS 인증서 (tls.crt) | SSL 인증서를 제공하여 HTTPS 통신을 활성화합니다. | PEM 형식으로 인증서 내용을 붙여넣습니다. 안전한 HTTPS 연결을 위해 필요합니다. 사용자가 K8s Secret로 TLS 인증서를 등록하고 K8s Ingress를 통해 TLS 인증을 처리하는 경우, tls.crt/tls.key 값을 입력해야 합니다. |
TLS 개인 키 (tls.key) | TLS 인증서를 인증하는 데 사용됩니다. | PEM 형식으로 개인 키 내용을 붙여넣습니다. 제공된 인증서와 일치해야 합니다. |
인그레스 클래스 | 이 게이트웨이 URL 구성에 사용할 인그레스 컨트롤러를 지정합니다. | nginx (기본값), alb 또는 appsec-kong에서 인그레스 클래스를 선택하세요. |
레이블 | 이 게이트웨이 URL에 대해 생성된 인그레스 리소스에 Kubernetes 레이블을 추가합니다. | 하나 이상의 키-값 쌍을 입력하세요. 쌍을 추가하거나 제거할 수 있습니다. |
주석 | 고급 구성을 위한 Kubernetes 인그레스 주석을 추가합니다. | 두 가지 모드를 사용하여 여러 주석을 입력할 수 있습니다: 키-값 쌍 (JSON 모드 OFF) 또는 JSON 스크립트 (JSON 모드 ON). |
두 개의 게이트웨이 URL(api.example.com 및 service.example.com)이 BasePath /api로 구성된 경우:
https://api.example.com/api/{API-Path}
https://service.example.com/api/{API-Path}
유효한 API 엔드포인트가 됩니다.
게이트웨이 수정하기
사용자는 기존 게이트웨이를 수정할 수 있습니다:
-
목록에서 게이트웨이를 선택합니다.
-
구성 가능한 필드 및 입력을 편집합니다 (게이트웨이 설명, 게이트웨이 태그, 게이트웨이 CPU/메모리, 데이터베이스 CPU/메모리, 토글 및 값,…).
- 필요에 따라 Gateway URLs을 업데이트합니다.
- 변경 사항을 저장하여 업데이트를 적용합니다.
사용자가 게이트웨이 URL을 변경하면, 게이트웨이 저장 버튼을 클릭하기 전에 게이트웨이 URL 저장 버튼을 클릭해야 합니다.
게이트웨이 삭제하기
게이트웨이를 삭제하면 permanently remove 모든 관련 데이터가 삭제됩니다. 이 작업은 cannot be undone.
- Gateway Management로 이동합니다.
- 삭제할 게이트웨이를 선택합니다.
- "Deleting A Gateway"를 클릭하고 작업을 확인합니다.
- 이 게이트웨이에 의존하는 API는 더 이상 접근할 수 없습니다.
- 삭제하기 전에 활성 API가 의존하지 않는지 확인하세요.