Kubernetes API 게이트웨이 개요
Kubernetes API 게이트웨이 개요 (API Gateways on Kubernetes Overview)
이 주제는 Kubernetes용 Consul의 API 게이트웨이에 대한 개요 정보를 제공해요. API 게이트웨이는 외부 네트워크 클라이언트가 Consul 데이터센터에서 실행되는 애플리케이션과 서비스에 접근할 수 있게 해요.
출처: 문서
본문
이 주제는 Kubernetes용 Consul의 API 게이트웨이에 대한 개요 정보를 제공해요.
소개 (Introduction)
API 게이트웨이는 외부 네트워크 클라이언트가 Consul 데이터센터에서 실행되는 애플리케이션과 서비스에 접근할 수 있게 해요. API 게이트웨이는 또한 경로나 요청 프로토콜에 따라 클라이언트의 요청을 특정 대상으로 전달할 수 있어요. 메시의 서비스에 접근하는 시스템은 조직 네트워크의 내부 또는 외부일 수 있어요. 남북 트래픽(north-south traffic) 은 이러한 유형의 네트워크 트래픽을 설명하는 일반적인 용어예요.
API 게이트웨이는 Kubernetes Gateway API 사양을 구현해요. 자세한 내용은 공식 Kubernetes 문서를 참고해요.
두 가지 API 게이트웨이 컨트롤러가 있어요:
- 표준 API 게이트웨이, API 그룹
gateway.networking.k8s.io - Consul API 게이트웨이, API 그룹
consul.hashicorp.com
표준 API 게이트웨이 (Standard API gateway)
표준 API 게이트웨이는 기본 구현이에요. gateway.networking.k8s.io에서 개발되었으며 이미 이전 Consul 릴리스에서 사용되고 테스트되었고 Kubernetes 커뮤니티에서 수용되었어요.
Kubernetes 플랫폼이 Gateway CRD를 관리하고 안정적인 API 버전(v1)만 지원하며 애플리케이션이 TCPRoute를 사용하는 경우를 제외하고는 모든 새 설치에 표준 API 게이트웨이를 권장해요.
이 경우 이러한 제약 하에서 표준 API 게이트웨이는 TCPRoute를 지원하지 않으므로 Consul API 게이트웨이를 대신 사용해요.
Consul API 게이트웨이 (Consul API gateway)
Consul API 게이트웨이는 consul.hashicorp.com API 그룹에서 개발된 Consul 전용 API 게이트웨이예요. 게이트웨이 CRD가 외부에서 관리되고 안정적인 v1 API 버전만 지원하는 플랫폼에 Consul API 게이트웨이를 사용해요.
애플리케이션이 TCPRoute를 필요로 하고 다음 조건 중 하나가 적용될 때 Consul API 게이트웨이를 사용해요:
- 플랫폼이 게이트웨이 CRD를 관리하며, CRD가 게이트웨이, 게이트웨이 클래스, HTTP 경로에 대해 안정적인
v1API 버전만 지원하고 reference grants에 대해v1beta1API 버전을 지원하는 경우. - 외부 애플리케이션이나 사용자가 게이트웨이 CRD를 설치했으며, CRD가 게이트웨이, 게이트웨이 클래스, HTTP 경로에 대해 안정적인
v1API 버전만, reference grants에 대해v1beta1API 버전을 지원하는 경우.
예시 매니페스트 (Example manifests)
표준 API 게이트웨이 예시:
gateway.yaml:
apiVersion: v1
items:
- apiVersion: gateway.networking.k8s.io/v1
kind: Gateway
metadata:
labels:
component: api-gateway
name: api-gateway
namespace: consul
spec:
gatewayClassName: consul
listeners:
- allowedRoutes:
namespaces:
from: All
name: http
port: 80
protocol: HTTP
- allowedRoutes:
namespaces:
from: All
name: tcp-8090
port: 8090
protocol: TCP
Consul API 게이트웨이 예시:
gateway.yaml:
apiVersion: v1
items:
- apiVersion: consul.hashicorp.com/v1beta1
kind: Gateway
metadata:
labels:
component: api-gateway-consul
name: api-gateway-consul
namespace: consul
spec:
gatewayClassName: consul-custom-class
listeners:
- allowedRoutes:
namespaces:
from: All
name: http
port: 80
protocol: HTTP
- allowedRoutes:
namespaces:
from: All
name: tcp-8090
port: 8090
protocol: TCP
워크플로 (Workflow)
Consul에서 API 게이트웨이를 사용하려면:
- 클러스터에 대한 기술 사양 확인. 특히 OpenShift 사용자는 Helm 차트의 특정 매개변수를 확인해야 해요.
- API 게이트웨이를 활성화하도록 구성.
- 개별 게이트웨이에 대한 정적 복제본이나 컨트롤러 관리 HPA 동작을 관리하려면 게이트웨이 스케일링 구성.
- 리스너 배포. Consul 서비스 메시의 서비스에 대한 요청의 인그레스 포인트 역할을 하는 하나 이상의 리스너를 구성해요.
- 리스너가 요청을 메시의 서비스로 전달할 수 있도록 경로 정의. 경로를 조정해 복잡한 트래픽 셰이핑을 정의할 수 있어요. 예를 들어 Kubernetes 클러스터의 서비스에 대한 URL 재작성 규칙을 정의하는 HTTP 요청 리라우팅을 할 수 있어요.
Consul API 게이트웨이 참조 객체 (Consul API gateway reference objects)
Consul API 게이트웨이 리소스 세부 사항은 다음 표를 참고해요:
| 리소스 | 짧은 이름 | API 버전 | 네임스페이스 | Kind |
|---|---|---|---|---|
| cgateways | cgtw | consul.hashicorp.com/v1beta1 |
true | Gateway |
| cgrpcroutes | cgrpcroutes | consul.hashicorp.com/v1alpha2 |
true | GRPCRoute |
| chttproutes | chttproutes | consul.hashicorp.com/v1beta1 |
true | HTTPRoute |
| creferencegrants | crefgrant | consul.hashicorp.com/v1beta1 |
true | ReferenceGrant |
| ctcproutes | ctcproutes | consul.hashicorp.com/v1alpha2 |
true | TCPRoute |
| ctlsroutes | ctlsroutes | consul.hashicorp.com/v1alpha2 |
true | TLSRoute |
| cudproutes | cudproutes | consul.hashicorp.com/v1alpha2 |
true | UDPRoute |
| customgatewayclasses | cgc | consul.hashicorp.com/v1beta1 |
false | CustomGatewayClass |
| customgatewaypolicies | cgp | consul.hashicorp.com/v1alpha1 |
true | CustomGatewayPolicy |
안내 (Guidance)
Kubernetes에서 Consul API 게이트웨이를 사용하는 데 도움이 되는 다음 리소스를 사용할 수 있어요.
튜토리얼 (Tutorials)
사용 문서 (Usage documentation)
- Kubernetes에서 API 게이트웨이 스케일링
- Kubernetes에 API 게이트웨이 리스너 배포
- Kubernetes에 API 게이트웨이 경로 배포
- Kubernetes에서 HTTP 요청 리라우팅
- Kubernetes에서 피어링된 서비스로 트래픽 라우팅
- Kubernetes API 게이트웨이 요청을 JWT로 검증
참조 문서 (Reference documentation)
Kubernetes에서 Consul API 게이트웨이를 사용하려면 다음 커스텀 리소스 정의(CRD)를 구성해야 해요.
| 구성 | 설명 |
|---|---|
Gateway |
API 게이트웨이와 게이트웨이의 리스너를 선언하는 주요 인프라 리소스를 정의해요. 또한 GatewayClass의 이름을 지정해요. |
GatewayClass |
게이트웨이 생성을 위한 템플릿으로 사용되는 게이트웨이 리소스 클래스를 정의해요. 기본 게이트웨이 클래스는 consul이며 대부분의 API 게이트웨이 구현에 적합해요. |
GatewayClassConfig |
GatewayClass 리소스에 대한 추가 게이트웨이 관련 구성 매개변수를 설명해요. |
Routes |
게이트웨이 리스너에서 백엔드 서비스로의 경로를 지정해요. |
MeshServices |
경로가 Consul의 서비스를 참조할 수 있게 해요. |
ServiceIntentions |
메시의 서비스 간 트래픽 통신 규칙을 지정해요. 의도는 또한 Consul API 게이트웨이를 통해 라우팅되는 서비스 간 트래픽에 대한 규칙을 적용해요. |
문제 해결 (Troubleshooting)
Kubernetes API 게이트웨이 오류 메시지는 Kubernetes에서 가장 흔한 API 게이트웨이 오류를 해결하는 데 도움이 돼요.