본문 바로가기
네트워크 (LAN,WAN)

API Gateway(게이트웨이) 아키텍처 설계 및 라우팅 환경 구성

by 날으는물고기 2023. 12. 16.

API Gateway(게이트웨이) 아키텍처 설계 및 라우팅 환경 구성

API 게이트웨이를 활용하여 인증 및 권한 부여를 관리하는 것은 매우 일반적이며 효과적인 방법입니다. 여러 오픈소스 API 게이트웨이 도구 중에서는 Kong, Apigee, Tyk, 그리고 Nginx 기반의 API Gateway가 널리 사용되고 있습니다.

Kong Gateway - Kong Docs

여기서는 Kong을 기반으로 한 API 게이트웨이를 사용하는 방법에 대해 설명하겠습니다.

Kong을 사용한 API 게이트웨이 구축

  1. Kong 설치 및 실행
    • Kong 공식 웹사이트에서 Kong을 다운로드하고 설치합니다.
    • Kong은 기본적으로 데이터베이스로 PostgreSQL을 사용하므로 PostgreSQL도 설치해야 합니다.
  2. Kong 설정
    • Kong을 실행하기 전에 kong.conf 파일을 설정하여 기본 구성을 지정합니다.
    • 예를 들어, 인증 플러그인 및 데이터베이스 연결을 구성합니다.
  3. 플러그인 추가
    • Kong은 플러그인을 통해 다양한 기능을 제공합니다. 인증과 관련된 플러그인 중 하나인 kong-oidc 플러그인을 추가할 수 있습니다.
    • kong-oidc는 OpenID Connect(OIDC)를 지원하여 토큰 기반의 인증을 쉽게 구현할 수 있게 해줍니다.
  4. API 등록
    • Kong에 보호할 API를 등록합니다. 이는 게이트웨이를 통해 라우팅될 서비스를 나타냅니다.
  5. 라우트 및 플러그인 적용
    • 등록한 API에 대한 라우트를 설정하고, 인증과 관련된 플러그인을 적용합니다.
    • kong-oidc 플러그인을 사용하여 OIDC 기반의 인증을 설정합니다.
  6. 인증 토큰 발급
    • 사용자가 API를 호출하기 전에 Kong 게이트웨이에 대해 인증을 수행해야 합니다.
    • 인증이 성공하면 게이트웨이는 토큰을 발급하고 이를 사용하여 실제 API에 액세스할 수 있게 됩니다.
  7. 스코프 및 권한 관리
    • OIDC 토큰의 스코프를 통해 권한을 부여하고 관리할 수 있습니다.
    • Kong은 다양한 권한 부여 및 액세스 제어 메커니즘을 지원합니다.
  8. 로그 및 모니터링 설정
    • 필요에 따라 로깅 및 모니터링을 위한 플러그인을 추가하여 API 사용량 및 성능을 추적할 수 있습니다.

참고 사항

  • Kong의 경우, 공식 문서가 매우 자세하게 제공되므로 구체적인 설정 및 운영 방법을 확인하기에 유용합니다.
  • 선택한 API 게이트웨이에 따라 구체적인 설정 방법이 다를 수 있으므로 해당 도구의 공식 문서를 반드시 참조하세요.

 

Kubernetes (k8s) 환경에 API 게이트웨이를 구성하는 것은 매우 일반적이며, 이를 통해 마이크로서비스 아키텍처를 관리하고 보호할 수 있습니다. 아래는 Kong을 Kubernetes 클러스터에 배포하고 구성하는 단계별 설명입니다.

단계 1: Kubernetes 클러스터 구성

  1. Kubernetes 설치
    • Kubernetes 클러스터를 구축하기 위해 선택한 배포 도구 또는 서비스를 사용하여 Kubernetes를 설치합니다.
  2. kubectl 설정
    • Kubernetes 클러스터에 접근하기 위해 kubectl을 구성합니다.
      kubectl config set-context <context-name> --cluster=<cluster-name> --user=<user-name> --namespace=<namespace-name>
      kubectl config use-context <context-name>

단계 2: Kong Ingress Controller 배포

  1. Kong Ingress Controller 설치
    • Kong Ingress Controller를 배포합니다.
      kubectl apply -f https://bit.ly/kong-ingress-dbless
  2. Kong Ingress Controller 확인
    • 배포된 Pod 및 서비스가 올바르게 생성되었는지 확인합니다.
      kubectl get pods -n kong
      kubectl get services -n kong

단계 3: KongProxy 리소스 생성

  1. KongProxy Custom Resource 생성
    • KongProxy Custom Resource를 사용하여 Kong이 어떤 서비스를 프록시하고 어떤 인증 및 권한 부여 기능을 사용할지 구성합니다.
      apiVersion: configuration.konghq.com/v1
      kind: KongProxy
      metadata:
      name: example
      namespace: default
  2. KongProxy 확인
    • KongProxy 리소스가 올바르게 생성되었는지 확인합니다.
      kubectl get kongproxy

단계 4: API 서비스 등록

  1. 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
  2. KongIngress 확인
    • KongIngress 리소스가 올바르게 생성되었는지 확인합니다.
      kubectl get ingress

단계 5: 인증 및 권한 설정

  1. KongPlugin 리소스 생성
    • KongPlugin 리소스를 사용하여 인증 및 권한 플러그인을 추가합니다.
      apiVersion: configuration.konghq.com/v1
      kind: KongPlugin
      metadata:
      name: example
      namespace: default
      config:
      name: key-auth
      key_names:
      - apikey
  2. KongPlugin 확인
    • KongPlugin 리소스가 올바르게 생성되었는지 확인합니다.
      kubectl get kongplugin

단계 6: 애플리케이션 테스트

  1. 애플리케이션 테스트
    • Kong이 프록시하는 서비스에 대해 인증 및 권한이 적용되었는지 확인합니다.

이제 Kong이 Kubernetes 클러스터에서 API 게이트웨이로 작동합니다. 이는 기본적인 설정으로, 필요에 따라 더 많은 기능을 추가하고 세부 사항을 조정할 수 있습니다. Kong 및 Kubernetes의 버전에 따라 몇 가지 변경이 있을 수 있으므로 각 도구의 공식 문서를 참조하는 것이 좋습니다.

 

Kong Ingress Controller의 새로운 버전에서는 공식적으로 Helm을 통한 설치를 권장하고 있습니다. 따라서 새로운 방법을 통해 설치할 수 있습니다.

Helm을 사용한 Kong Ingress Controller 설치

  1. Helm Repository 추가
    helm repo add kong https://charts.konghq.com
    helm repo update
  2. Kong Ingress Controller 설치
    helm install kong/kong --generate-name --set ingressController.installCRDs=false
    • --generate-name 옵션은 릴리즈 이름을 자동으로 생성하게 합니다.
    • --set ingressController.installCRDs=false 옵션은 CRDs(카스터머 리소스 디피니션)를 설치하지 않도록 설정합니다.
  3. 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: /apppathType: Prefix 설정을 통해 /app 경로로 들어오는 모든 요청이 example-service로 라우팅됩니다.

 

이제 Helm을 통해 Kong Ingress Controller를 설치하고, Ingress 리소스를 통해 /app 경로로 서비스될 수 있도록 구성했습니다.

728x90

댓글