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: 드롭다운 목록에서 Kubernetes 스토리지 클래스를 선택합니다.
- Purpose: 게이트웨이에 대한 스토리지 할당을 지정합니다.
- Mandatory: 예
- Input Instructions: 5와 500(Gi) 사이의 값을 입력합니다.
- Purpose: Kong 프록시의 서비스 유형을 결정합니다.
- Mandatory: 예
- Input Instructions: ClusterIP, NodePort, LoadBalancer 중 하나를 선택합니다. NodePort 또는 LoadBalancer가 선택되면, 사용자가 Kong Proxy Service NodePort 값을 입력해야 합니다(30000과 32767 사이).

- Purpose: 친화성은 노드 레이블을 일치시켜 게이트웨이 포드가 예약될 노드를 제어하는 데 사용됩니다.
- Mandatory: 켜져 있으면 예.
- Input Instructions: Affinity를 ON으로 전환하여 활성화합니다. 그런 다음 노드 레이블에 대한 Key와 Value를 제공합니다. 이는 nodeAffinity 규칙으로 Kubernetes에서 requiredDuringSchedulingIgnoredDuringExecution를 사용하여 변환됩니다. 예를 들어:

nodeAffinity:
- Purpose: Toleration은 특정 작업 부하에 대해 표시된 노드에 게이트웨이 포드를 예약할 수 있게 합니다.
- Mandatory: ON으로 전환하면 예입니다.
- Input Instructions: ON으로 전환한 후 다음을 입력합니다:
- Operator: Equal 또는 Exists 중에서 선택합니다. Equal: key와 value는 정확히 일치해야 합니다. Exists: key만 존재하면 되고, value는 필요하지 않습니다.
- Key와 Value: taint key와 value를 제공합니다 (operator가 Exists인 경우 value는 선택 사항입니다).

tolerations:
- effect: NoSchedule
key: "tolerationKey"
operator: "Equal" 또는 Exists
value: "tolerationValue"
- Purpose: Topology Spread Constraints는 게이트웨이 포드가 실패 도메인(예: 영역 또는 노드) 전반에 고르게 분포되도록 보장하여 복원력과 가용성을 향상시킵니다.
- Mandatory: ON으로 전환하면 예입니다.
- Input Instructions: ON으로 전환한 후 다음을 입력합니다:
- 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: ON/OFF 전환. ON인 경우, Gateway가 배포될 때 기본 Redis가 설치됩니다. OFF인 경우, 사용자는 APIM Redis가 Redis를 사용하는 정책(속도 제한, jwt 블랙리스트, OIDC)을 지원하지 않음을 통보받습니다. 사용자는 OFF로 전환을 계속하기 위해 프롬프트에서 확인해야 합니다.

- 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입니다. | 예 |
| 게이트웨이 자동 스케일링 | 배포 후 자동으로 포드 리소스 스케일링을 활성화합니다. | ON/OFF 전환. ON인 경우, 다음을 구성합니다: 최소 복제본, 최대 복제본, CPU 임계값 (%), 메모리 임계값 (%) | 전환 시 예 |
| 콩 네임스페이스 | 게이트웨이가 Kubernetes에서 실행되는 위치를 결정합니다. | 드롭다운 목록에서 네임스페이스를 선택합니다. | 예 |
| 콩 스토리지 클래스 | 게이트웨이에 대한 스토리지가 어떻게 프로비저닝되는지를 정의합니다. | 드롭다운 목록에서 스토리지 클래스를 선택합니다. | 예 |
| 스토리지 용량 | 게이트웨이에 대한 스토리지 할당을 지정합니다. | 5에서 500 (Gi) 사이의 값을 입력합니다. | 예 |
| 콩 프록시 서비스 유형 | 외부 액세스를 위한 콩 프록시의 서비스 유형을 정의합니다. | ClusterIP, NodePort 또는 LoadBalancer 중에서 선택합니다. 기본값은 ClusterIP입니다. | 예 |
| 친화성 | 일치하는 레이블이 있는 노드에 게이트웨이 포드를 예약합니다. | ON/OFF 전환. ON인 경우, 노드 레이블에 대한 키와 값을 입력합니다. | 전환 시 예 |
| 관용 | 게이트웨이 포드가 오염된 노드에서 실행될 수 있도록 허용합니다. | ON/OFF 전환. ON인 경우, 연산자를 선택합니다: Equal 또는 Exists. 키를 입력하고, 선택적으로 값을 입력합니다. | 전환 시 예 |
| 토폴로지 분산 | 가용성을 높이기 위해 영역에 포드를 고르게 분산합니다. | ON/OFF 전환. ON인 경우, 입력: 최대 편차 (예: 1). 만족하지 않을 때의 옵션을 선택합니다: ScheduleAnyway, DoNotSchedule, DoNotScheduleIfNotSatisfied 중에서 선택합니다. | 전환 시 예 |
| 내부 레디스 | 캐싱을 위한 내부 레디스 인스턴스를 허용합니다. | ON/OFF 전환. ON인 경우, 게이트웨이가 배포될 때 기본 레디스가 설치됩니다. | 전환 시 예 |
| 플루언트 비트 | 메트릭 수집을 위한 OpenTelemetry 에이전트 또는 로그 수집을 위한 Elasticsearch를 활성화합니다. | OpenTelemetry 또는 Elasticsearch 중에서만 선택할 수 있습니다. | 전환 시 예 |
| 콩 구성 | 콩 구성을 수동으로 재정의할 수 있도록 활성화합니다. | 편집기를 활성화하고 유효한 JSON을 입력하려면 ON으로 전환합니다. | 전환 시 예 |
생성 완료
생성을 완료하고 게이트웨이 구성을 저장하려면 CREATE A GATEWAY 버튼을 클릭하십시오.
게이트웨이 URL 추가 및 관리
게이트웨이 URL 구성은 사용자가 API 게이트웨이에 대해 하나 이상의 공개 도메인을 정의할 수 있도록 합니다. 또한 HTTPS를 위한 TLS 인증서, API 라우팅을 위한 글로벌 베이스 경로 및 주석을 통한 추가 메타데이터를 지원합니다. 각 게이트웨이는 API 게이트웨이에 접근하는 방법을 정의하는 여러 개의 게이트웨이 URL을 가질 수 있습니다.
게이트웨이 URL 추가를 시작하려면, 사용자는 게이트웨이 관리 화면에 나열된 생성된 게이트웨이를 클릭하여 게이트웨이 수정 화면으로 들어갈 수 있습니다.

그곳에서 사용자는 아래에 있는 게이트웨이 URL 구성 섹션을 찾을 수 있습니다.

아래는 게이트웨이 URL을 생성하는 단계입니다:
URL 생성
ADDITION을 클릭하여 여러 개의 URL을 생성합니다. 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: tls.crt를 포함하여 SSL 인증서를 제공하고 tls.key 파일을 사용하여 TLS 인증서를 인증함으로써 HTTPS 통신을 활성화합니다. 네트워크 정책이 게이트웨이 URL과 통신할 때 HTTPS만 허용하도록 적용된 경우, 사용자는 HTTPS를 활성화해야 합니다. 사용자가 K8s Secret로 TLS 인증서를 등록하고 K8s Ingress를 통해 TLS 인증을 처리하는 경우, tls.crt/tls.key 값을 입력해야 합니다.
- Mandatory: 의존
- Input Instructions: PEM 형식으로 인증서 내용을 붙여넣습니다. 보안 HTTPS 연결에 필요합니다.
- 참고: APIM은 TLS 1.2 및 TLS 1.3만 지원합니다. TLS 1.0 및 TLS 1.1은 현대 보안 표준을 준수하기 위해 기본적으로 비활성화되어 있습니다.

- Purpose: 이 게이트웨이 URL 구성에 사용할 인그레스 컨트롤러를 지정합니다.
- Mandatory: 예
- Input Instructions: 드롭다운에서 인그레스 클래스를 선택합니다. 사용 가능한 옵션은 다음과 같을 수 있습니다:
- nginx (기본값)
- alb
- appsec-kong
이 설정은 선택한 인그레스 컨트롤러를 통해 게이트웨이 URL을 라우팅합니다.

- Purpose: 이 게이트웨이 URL에 대해 생성된 인그레스 리소스에 Kubernetes 레이블을 추가합니다. 분류 또는 자동화 목적으로 유용합니다.
- Mandatory: 아니요
- Input Instructions: 하나 이상의 키-값 쌍을 입력하세요. 이러한 레이블은 생성된 인그레스 객체에 적용됩니다. 더하기 버튼을 사용하여 여러 항목을 추가하거나, 빼기 버튼을 사용하여 추가된 항목을 제거하세요.

- Purpose: 고급 구성을 위한 Kubernetes 인그레스 주석을 추가합니다. 예를 들어, 사용자 정의 시간 초과, 헤더 조작 또는 컨트롤러 특정 옵션 등이 있습니다.
- Mandatory: 아니요
- Input Instructions: 두 가지 모드를 사용하여 주석을 입력할 수 있습니다:
폼 모드 (JSON 토글 OFF): 각 주석에 대해 키와 값을 수동으로 입력합니다. 일부 필드는 시스템 제약에 따라 편집이 잠길 수 있습니다. 더하기 버튼을 클릭하여 여러 주석을 추가하거나, 빼기 버튼을 클릭하여 추가된 주석을 제거할 수 있습니다. 최소한 하나의 주석은 유지해야 합니다.

예시:
"key": "nginx.ingress.kubernetes.io/proxy-connect-timeout",
"value": "300"
JSON 모드 (JSON 토글 ON): 편집기에서 키-값 JSON 객체의 배열로 주석을 입력합니다.

예시:
[
{
"key": "nginx.ingress.kubernetes.io/configuration-snippet",
"value": "more_clear_headers \"server\";more_clear_headers \"via\";"
},
{
"key": "nginx.ingress.kubernetes.io/proxy-connect-timeout",
"value": "300"
},
{
"key": "nginx.ingress.kubernetes.io/proxy-read-timeout",
"value": "300"
},
{
"key": "nginx.ingress.kubernetes.io/proxy-send-timeout",
"value": "300"
}
]
게이트웨이 URL 구성은 아래 표에 요약되어 있습니다:
| Field Name | Purpose | Input Notes |
|---|---|---|
| Gateway URL | 게이트웨이에 접근할 수 있는 공개 도메인을 정의합니다. 사용자가 사용 중인 게이트웨이 URL을 변경하면 기존 API가 제대로 호출되지 않을 수 있습니다. | 유효한 도메인을 입력하세요 (예: api.example.com). 필수 입력란입니다. |
| Global BasePath | 이 게이트웨이 아래의 모든 API에 대한 공통 접두사를 설정합니다. 정의된 경우, 이 게이트웨이 아래의 모든 API는 이 접두사를 상속받습니다. | 기본 경로를 입력하세요 (예: /api). /로 남겨두면 루트가 사용됩니다. |
| TLS Certificates (tls.crt) | SSL 인증서를 제공하여 HTTPS 통신을 가능하게 합니다. | PEM 형식의 인증서 내용을 붙여넣으세요. 보안 HTTPS 연결에 필수입니다. 사용자가 K8s Secret로 TLS 인증서를 등록하고 K8s Ingress를 통해 TLS 인증을 처리하는 경우, tls.crt/tls.key 값을 입력해야 합니다. |
| TLS Private Key (tls.key) | TLS 인증서를 인증하는 데 사용됩니다. | PEM 형식의 개인 키 내용을 붙여넣으세요. 제공된 인증서와 일치해야 합니다. |
| Ingress Class | 이 게이트웨이 URL 구성에 사용할 인그레스 컨트롤러를 지정합니다. | nginx (기본값), alb 또는 appsec-kong 중에서 인그레스 클래스를 선택하세요. |
| Labels | 이 게이트웨이 URL에 대해 생성된 인그레스 리소스에 Kubernetes 레이블을 추가합니다. | 하나 이상의 키-값 쌍을 입력하세요. 쌍을 추가하거나 제거할 수 있습니다. |
| Annotations | 고급 구성을 위한 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을 변경하면, SAVING A GATEWAY 버튼을 클릭하기 전에 SAVE GATEWAY URL 버튼을 클릭하는 것을 잊지 마세요.
게이트웨이 삭제
게이트웨이를 삭제하면 permanently remove 모든 관련 데이터가 삭제됩니다. 이 작업은 cannot be undone.
- Gateway Management로 이동합니다.
- 삭제할 게이트웨이를 선택합니다.

- "Deleting A Gateway"를 클릭하고 작업을 확인합니다.
- 이 게이트웨이에 의존하는 API는 더 이상 접근할 수 없습니다.
- 삭제하기 전에 활성 API가 의존하지 않는지 확인하세요.