API Gateway(게이트웨이) 아키텍처 설계 및 라우팅 환경 구성
API 게이트웨이를 활용하여 인증 및 권한 부여를 관리하는 것은 매우 일반적이며 효과적인 방법입니다. 여러 오픈소스 API 게이트웨이 도구 중에서는 Kong, Apigee, Tyk, 그리고 Nginx 기반의 API Gateway가 널리 사용되고 있습니다.
여기서는 Kong을 기반으로 한 API 게이트웨이를 사용하는 방법에 대해 설명하겠습니다.
Kong을 사용한 API 게이트웨이 구축
- Kong 설치 및 실행
- Kong 공식 웹사이트에서 Kong을 다운로드하고 설치합니다.
- Kong은 기본적으로 데이터베이스로 PostgreSQL을 사용하므로 PostgreSQL도 설치해야 합니다.
- Kong 설정
- Kong을 실행하기 전에
kong.conf
파일을 설정하여 기본 구성을 지정합니다. - 예를 들어, 인증 플러그인 및 데이터베이스 연결을 구성합니다.
- Kong을 실행하기 전에
- 플러그인 추가
- Kong은 플러그인을 통해 다양한 기능을 제공합니다. 인증과 관련된 플러그인 중 하나인
kong-oidc
플러그인을 추가할 수 있습니다. kong-oidc
는 OpenID Connect(OIDC)를 지원하여 토큰 기반의 인증을 쉽게 구현할 수 있게 해줍니다.
- Kong은 플러그인을 통해 다양한 기능을 제공합니다. 인증과 관련된 플러그인 중 하나인
- API 등록
- Kong에 보호할 API를 등록합니다. 이는 게이트웨이를 통해 라우팅될 서비스를 나타냅니다.
- 라우트 및 플러그인 적용
- 등록한 API에 대한 라우트를 설정하고, 인증과 관련된 플러그인을 적용합니다.
kong-oidc
플러그인을 사용하여 OIDC 기반의 인증을 설정합니다.
- 인증 토큰 발급
- 사용자가 API를 호출하기 전에 Kong 게이트웨이에 대해 인증을 수행해야 합니다.
- 인증이 성공하면 게이트웨이는 토큰을 발급하고 이를 사용하여 실제 API에 액세스할 수 있게 됩니다.
- 스코프 및 권한 관리
- OIDC 토큰의 스코프를 통해 권한을 부여하고 관리할 수 있습니다.
- Kong은 다양한 권한 부여 및 액세스 제어 메커니즘을 지원합니다.
- 로그 및 모니터링 설정
- 필요에 따라 로깅 및 모니터링을 위한 플러그인을 추가하여 API 사용량 및 성능을 추적할 수 있습니다.
참고 사항
- Kong의 경우, 공식 문서가 매우 자세하게 제공되므로 구체적인 설정 및 운영 방법을 확인하기에 유용합니다.
- 선택한 API 게이트웨이에 따라 구체적인 설정 방법이 다를 수 있으므로 해당 도구의 공식 문서를 반드시 참조하세요.
Kubernetes (k8s) 환경에 API 게이트웨이를 구성하는 것은 매우 일반적이며, 이를 통해 마이크로서비스 아키텍처를 관리하고 보호할 수 있습니다. 아래는 Kong을 Kubernetes 클러스터에 배포하고 구성하는 단계별 설명입니다.
단계 1: Kubernetes 클러스터 구성
- Kubernetes 설치
- Kubernetes 클러스터를 구축하기 위해 선택한 배포 도구 또는 서비스를 사용하여 Kubernetes를 설치합니다.
- kubectl 설정
- Kubernetes 클러스터에 접근하기 위해
kubectl
을 구성합니다.kubectl config set-context <context-name> --cluster=<cluster-name> --user=<user-name> --namespace=<namespace-name> kubectl config use-context <context-name>
- Kubernetes 클러스터에 접근하기 위해
단계 2: Kong Ingress Controller 배포
- Kong Ingress Controller 설치
- Kong Ingress Controller를 배포합니다.
kubectl apply -f https://bit.ly/kong-ingress-dbless
- Kong Ingress Controller를 배포합니다.
- Kong Ingress Controller 확인
- 배포된 Pod 및 서비스가 올바르게 생성되었는지 확인합니다.
kubectl get pods -n kong kubectl get services -n kong
- 배포된 Pod 및 서비스가 올바르게 생성되었는지 확인합니다.
단계 3: KongProxy 리소스 생성
- KongProxy Custom Resource 생성
- KongProxy Custom Resource를 사용하여 Kong이 어떤 서비스를 프록시하고 어떤 인증 및 권한 부여 기능을 사용할지 구성합니다.
apiVersion: configuration.konghq.com/v1 kind: KongProxy metadata: name: example namespace: default
- KongProxy Custom Resource를 사용하여 Kong이 어떤 서비스를 프록시하고 어떤 인증 및 권한 부여 기능을 사용할지 구성합니다.
- KongProxy 확인
- KongProxy 리소스가 올바르게 생성되었는지 확인합니다.
kubectl get kongproxy
- KongProxy 리소스가 올바르게 생성되었는지 확인합니다.
단계 4: API 서비스 등록
- KongIngress 리소스 생성
- KongIngress 리소스를 사용하여 백엔드 서비스를 Kong에 연결합니다.
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: example annotations: konghq.com/strip-path: "true" spec: rules: - http: paths: - path: /example pathType: ImplementationSpecific backend: service: name: example-service port: number: 80
- KongIngress 리소스를 사용하여 백엔드 서비스를 Kong에 연결합니다.
- KongIngress 확인
- KongIngress 리소스가 올바르게 생성되었는지 확인합니다.
kubectl get ingress
- KongIngress 리소스가 올바르게 생성되었는지 확인합니다.
단계 5: 인증 및 권한 설정
- KongPlugin 리소스 생성
- KongPlugin 리소스를 사용하여 인증 및 권한 플러그인을 추가합니다.
apiVersion: configuration.konghq.com/v1 kind: KongPlugin metadata: name: example namespace: default config: name: key-auth key_names: - apikey
- KongPlugin 리소스를 사용하여 인증 및 권한 플러그인을 추가합니다.
- KongPlugin 확인
- KongPlugin 리소스가 올바르게 생성되었는지 확인합니다.
kubectl get kongplugin
- KongPlugin 리소스가 올바르게 생성되었는지 확인합니다.
단계 6: 애플리케이션 테스트
- 애플리케이션 테스트
- Kong이 프록시하는 서비스에 대해 인증 및 권한이 적용되었는지 확인합니다.
이제 Kong이 Kubernetes 클러스터에서 API 게이트웨이로 작동합니다. 이는 기본적인 설정으로, 필요에 따라 더 많은 기능을 추가하고 세부 사항을 조정할 수 있습니다. Kong 및 Kubernetes의 버전에 따라 몇 가지 변경이 있을 수 있으므로 각 도구의 공식 문서를 참조하는 것이 좋습니다.
Kong Ingress Controller의 새로운 버전에서는 공식적으로 Helm을 통한 설치를 권장하고 있습니다. 따라서 새로운 방법을 통해 설치할 수 있습니다.
Helm을 사용한 Kong Ingress Controller 설치
- Helm Repository 추가
helm repo add kong https://charts.konghq.com helm repo update
- Kong Ingress Controller 설치
helm install kong/kong --generate-name --set ingressController.installCRDs=false
--generate-name
옵션은 릴리즈 이름을 자동으로 생성하게 합니다.--set ingressController.installCRDs=false
옵션은 CRDs(카스터머 리소스 디피니션)를 설치하지 않도록 설정합니다.
- Kong Ingress 확인
kubectl get ingress -n <namespace>
서비스 URL 변경
만약 /app
경로로 서비스되기를 원한다면, Ingress 리소스를 다음과 같이 수정합니다.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: example
annotations:
konghq.com/strip-path: "true"
spec:
rules:
- http:
paths:
- path: /app
pathType: Prefix
backend:
service:
name: example-service
port:
number: 80
위의 Ingress 리소스에서 path: /app
및 pathType: Prefix
설정을 통해 /app
경로로 들어오는 모든 요청이 example-service
로 라우팅됩니다.
이제 Helm을 통해 Kong Ingress Controller를 설치하고, Ingress 리소스를 통해 /app
경로로 서비스될 수 있도록 구성했습니다.