Kubernetes 통합 태스크

현재 Apigee Edge 문서가 표시되고 있습니다.
Apigee X 문서로 이동
정보

커스텀 플러그인 추가

커스텀 플러그인을 작성하여 마이크로 게이트웨이에 새로운 기능을 추가할 수 있습니다. 커스텀 플러그인을 사용하면 마이크로 게이트웨이를 통해 전달되는 요청 및 응답과 프로그래매틱 방식으로 상호작용할 수 있습니다.

이 섹션에서는 Kubernetes 클러스터에서 실행되는 Edge Micro Gateway 인스턴스에 플러그인을 패키징하고 배포하는 방법을 설명합니다.

이 섹션의 나머지 부분에서는 사용자가 표준 Edge Micro Gateway 설정을 위한 플러그인을 작성하고 구성하는 데 익숙하다고 가정합니다. 그렇지 않은 경우 커스텀 플러그인 개발을 참고하세요.

플러그인 패키징

커스텀 플러그인을 패키징하려면 다음 단계를 따르세요.

  1. 간단한 플러그인 작성의 안내에 따라 플러그인을 작성하고 테스트합니다.

  2. 플러그인 코드를 적절한 디렉터리 구조에 배치합니다. 플러그인 디렉터리는 설정된 구조를 따라야 합니다. 다음 예는 따라야 할 구조를 보여줍니다. 여기서 response-uppercaserequest-headers는 커스텀 플러그인 코드가 포함된 폴더의 이름입니다 (다음 이름은 예시일 뿐이며 폴더 이름은 다를 수 있음).

    plugin
      |
      |-- plugins
        |
        |- response-uppercase
        |     |- index.js
        |     |- package.json
        |- request-headers
        |     | - index.js
              | - package.json
    
  3. cdplugin 폴더로 이동합니다.

  4. plugin 폴더에서 전체 plugins 폴더를 압축합니다.

    zip -r plugins.zip plugins/

Docker 이미지 만들기

  1. ZIP 파일이 있는 디렉터리에서 새 파일 Dockerfile를 만듭니다.
  2. 다음 코드를 Dockerfile에 추가하고 파일을 저장합니다.

    FROM gcr.io/apigee-microgateway/edgemicro:latest
    RUN apt-get install unzip
    COPY plugins.zip /opt/apigee/
    RUN chown apigee:apigee /opt/apigee/plugins.zip
    RUN su - apigee -c "unzip /opt/apigee/plugins.zip -d /opt/apigee"
    EXPOSE 8000
    EXPOSE 8443
    ENTRYPOINT ["entrypoint"]
    
  3. 플러그인을 사용하여 새 Edge Micro Gateway Docker 이미지를 만들고 이미지를 Docker 레지스트리에 푸시합니다. docker.io 또는 gcr.io 등 원하는 레지스트리를 사용할 수 있습니다.

    docker build -t edgemicroplugins .
    docker tag edgemicroplugins container-registry/your-project/edgemicroplugins
    docker push container-registry/your-project/edgemicroplugins
    

    예를 들면 다음과 같습니다.

    docker build -t edgemicroplugins .
    docker tag edgemicroplugins gcr.io/my-project/edgemicroplugins
    docker push   gcr.io/my-project/edgemicroplugins
    

Edge Micro Gateway 구성 업데이트

  1. Edge Micro Gateway 구성 파일에 플러그인을 추가합니다. 구성 파일은 다음 위치에서 찾을 수 있습니다.

    $HOME/.edgemicro/org-env-config.yaml
    

    예를 들면 다음과 같습니다.

    $HOME/.edgemicro/myorg-test-config.yaml

다음 샘플 구성에는 커스텀 플러그인 response-uppercase가 추가되었습니다. 기본적으로 oauth 플러그인이 이미 있었습니다.

  edgemicro:
    ...
    plugins:
      sequence:
        - oauth
        - response-uppercase

Kubernetes 클러스터 업데이트

마지막 단계는 구성 변경사항을 Kubernetes 클러스터에 적용하는 것입니다. Kubernetes는 Container Registry에 푸시한 플러그인 코드와 함께 새 이미지를 가져와서 새로 생성된 포드에 사용합니다.

Edge Micro Gateway를 서비스로 배포한 경우

edgemicroctl 명령어를 사용하여 업데이트된 Edge Micro게이트 구성을 삽입합니다.

  1. Edge Micro Gateway 배포를 새 이미지로 업데이트합니다. 예를 들면 다음과 같습니다.

    kubectl apply -f <(edgemicroctl -org=your_organization -env=your_environment -key=configuration_key -sec=configuration_secret -conf=config_file_path -img=container-registry/your_project_name/image_name:latest)

    각 항목의 의미는 다음과 같습니다.

    • your_organization - edgemicro configure 명령어에서 지정한 Apigee 조직입니다.
    • your_environment - edgemicro configure 명령어에서 지정한 환경입니다.
    • configuration_key - edgemicro configure 명령어에서 반환된 키입니다.
    • configuration_secret - edgemicro configure 명령어에서 반환된 보안 비밀입니다.
    • config_file_path - edgemicro configure 명령어에서 반환된 Edge Micro 구성 파일의 경로입니다.
    • container-registry - 이미지를 푸시한 Docker 레지스트리입니다. 예를 들어 gcr.io 또는 docker.io입니다.
    • your_project_name - Docker 이미지를 푸시한 Docker 저장소의 프로젝트 이름입니다.
    • image_name - 푸시한 Docker 이미지의 이름입니다.

    예:

    kubectl apply -f <(edgemicroctl -org=jdoe -env=test -key=f2d2eaa52b758493d00cec656e574ac947bee1d701c5c5f3295e5eaa39a3b -sec=0c38cda3fac6c59152f15657052ba1728f8003c1a763cf08da2a -conf=/Users/jdoe/.edgemicro/apigeesearch-test-config.yaml -img=gcr.io/jdoe-project/edgemicroplugins:latest)
  2. 플러그인을 테스트합니다. API를 호출하여 예상대로 동작이 발생하는지 확인합니다. 예를 들어 '응답 대문자' 플러그인의 경우 응답 텍스트가 아래와 같이 모두 대문자로 변환됩니다.

    curl $GATEWAY_IP -H 'x-api-key:3eqeedJRFLlCshwWBiXq4xKFoH1Se3xR'

    출력:

    HELLO WORLD
    
새 구성 수동 삽입

수동 삽입은 명령줄에서 새 구성을 삽입하는 간단한 접근 방식입니다.

  1. 다음 명령어를 실행합니다.

    kubectl apply -f <(edgemicroctl -org=your_org -env=your_env -key=your_key -sec=your_secret -conf=config_file_path -img=container-registry/your_project_name/image_name:latest -svc=service_deployment_file)

    각 항목의 의미는 다음과 같습니다.

    • your_org - edgemicro configure 명령어에서 지정한 Apigee 조직입니다.
    • your_env - edgemicro configure 명령어에서 지정한 환경입니다.
    • your_key - edgemicro configure 명령어에서 반환된 키입니다.
    • your_secret - edgemicro configure 명령어에서 반환된 보안 비밀입니다.
    • config_file_path - edgemicro configure 명령어에서 반환된 Edge Micro 구성 파일의 경로입니다.
    • container-registry - 이미지를 푸시한 Docker 레지스트리입니다. 예를 들어 gcr.io 또는 docker.io입니다.
    • your_project_name - Docker 이미지를 푸시한 Docker 저장소의 프로젝트 이름입니다.
    • image_name - 푸시한 Docker 이미지의 이름입니다.
    • service_deployment_file - 플러그인이 적용될 서비스의 배포 파일 경로입니다. 예를 들면 samples/helloworld/helloworld.yaml입니다.

    예를 들면 다음과 같습니다.

    kubectl apply -f <(edgemicroctl -org=myorg -env=test-key=0e3ecea28a64099410594406b30e54439af5265f8 -sec=e3919250bee37c69cb2e5b41170b488e1c1d -conf=/Users/jdoe/.edgemicro/myorg-test-config.yaml -img=gcr.io/myproject/edgemicroplugins:latest -svc=samples/helloworld/helloworld.yaml)
  2. 플러그인을 테스트합니다. 서비스 API를 호출하여 예상대로 동작이 발생하는지 확인합니다. 예를 들어 'response uppercase' 플러그인의 경우 응답 텍스트가 아래와 같이 모두 대문자로 변환됩니다.

    curl $GATEWAY_IP -H 'x-api-key:3eqeedJRFLlCshwWBiXq4xKFoH1Se3xR'

    출력:

    HELLO WORLD
    

Edge Micro Gateway 구성 변경

경우에 따라 Edge Micro Gateway 구성을 수정해야 할 수 있습니다. 예를 들어 Edge Micro Gateway에 새 플러그인을 추가하거나 구성 매개변수를 변경할 수 있습니다. 이 섹션에서는 Kubernetes에서 실행되는 Edge Micro Gateway에 구성을 변경하고 적용하는 방법을 설명합니다.

  1. 아래와 같이 구성 파일 secret.yaml를 만듭니다.

    apiVersion: v1
    kind: Secret
    metadata:
      name: mgwsecret
    type: Opaque
    data:
      mgorg: EDGEMICRO_ORG
      mgenv: EDGEMICRO_ENV
      mgkey: EDGEMICRO_KEY
      mgsecret: EDGEMICRO_SECRET
      mgconfig: EDGEMICRO_CONFIG
    
  2. base64로 인코딩된 EDGEMICRO_ORG, EDGEMICRO_ENV, EDGEMICRO_KEY, EDGEMICRO_SECRET 값을 지정합니다.

    echo -n "your-org" | base64 | tr -d '\n'
    echo -n "your-org-env" | base64 | tr -d '\n'
    echo -n "your-mg-key" | base64 | tr -d '\n'
    echo -n "your-mg-secret" | base64 | tr -d '\n'
    
  3. 조직 및 환경의 Edge Micro Gateway 구성 파일을 변경합니다.

    $HOME/.edgemicro/your_org-your_env-config.yaml
  4. Base64 구성 파일 콘텐츠의 두 배를 인코딩합니다.

    cat $HOME/.edgemicro/org-env-config.yaml | base64 | tr -d '\n' | base64  | tr -d '\n'
  5. 서비스가 실행되는 네임스페이스에서 Kubernetes에 변경사항을 적용합니다.

    kubectl apply -f secret.yaml -n 

이러한 새로운 변경사항은 기존 Micro Gateway 포드가 자동으로 선택되지 않지만 새 포드에 변경사항이 적용됩니다. 배포에서 변경사항을 선택하는 새 포드를 만들도록 기존 포드를 삭제할 수 있습니다.

서비스 예시

다음 예에서는 새

  1. 포드를 가져옵니다.

    kubectl get pods

    출력 예시:

    NAME                                 READY     STATUS    RESTARTS   AGE
    edge-microgateway-57ccc7776b-g7nrg   1/1       Running   0          19h
    helloworld-6987878fc4-cltc2          1/1       Running   0          1d
    
  2. edge-microgateway 포드를 삭제합니다.

    kubectl delete pod edge-microgateway-57ccc7776b-g7nrg

    출력 예시:

    pod "edge-microgateway-57ccc7776b-g7nrg" deleted
    
  3. 포드를 다시 가져옵니다. 새 포드가 가동되고 구성 변경사항을 가져옵니다.

    kubectl get pods

    출력 예시:

    NAME                                 READY     STATUS    RESTARTS   AGE
    edge-microgateway-57ccc7776b-7f6tc   1/1       Running   0          5s
    helloworld-6987878fc4-cltc2          1/1       Running   0          1d
    

배포 확장

이 섹션에서는 Kubernetes 확장 원칙을 사용하여 배포를 확장하는 방법을 설명합니다.

서비스 배포 확장

  1. 배포를 확인합니다.

    kubectl get deployments

    출력 예시:

    NAME                DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
    edge-microgateway   1         1         1            1           18h
    helloworld          1         1         1            1           1d
    

    출력에 복제본 1개가 배포되었음을 나타냅니다.

  2. 1개의 복제본에서 원하는 만큼 배포를 확장합니다. 이 예에서는 edge-microgateway 서비스가 확장됩니다.

    kubectl scale deployment edge-microgateway --replicas=2
  3. (선택사항) 자동 확장을 사용하려면 다음 명령어를 사용합니다.

    kubectl autoscale deployment edge-microgateway --cpu-percent=50 --min=1 --max=10
  4. 배포를 확인하여 확장이 사용 설정되어 있는지 확인합니다.

    kubectl get deployments

    출력 예시:

    NAME                DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
    edge-microgateway   2         2         2            2           18h
    helloworld          1         1         1            1           1d
    

    복제본 두 개를 포함하도록 상태가 변경되었습니다.

  5. 포드를 확인합니다.

    kubectl get pods

    출력 예시:

    NAME                                 READY     STATUS    RESTARTS   AGE
    edge-microgateway-57ccc7776b-g7nrg   1/1       Running   0          18h
    edge-microgateway-57ccc7776b-rvfz4   1/1       Running   0          41s
    helloworld-6987878fc4-cltc2          1/1       Running   0          1d
    

    출력에 두 복제본이 모두 실행 중인 상태입니다.

여러 Edge Micro Gateway 구성에 네임스페이스 사용

Edge Micro Gateway 서비스의 여러 인스턴스를 Kubernetes 클러스터에 배포하고 구성할 수 있습니다. 이 사용 사례를 통해 각 마이크로 게이트웨이 인스턴스를 고유한 플러그인 및 매개변수 집합으로 구성할 수 있습니다. 예를 들면 다음과 같습니다.

  • Edge Micro Gateway 서비스 A에는 급증 저지 플러그인만 필요합니다.
  • Edge Micro게이트 서비스 B에는 할당량 및 OAuth 플러그인이 필요하지만 급증 저지에는 필요하지 않습니다.

이 사용 사례를 해결하려면 Kubernetes 네임스페이스를 사용하세요. 예를 들어 Edge Micro게이트 서비스 A를 네임스페이스 foo에 배포하고, Edge Micro게이트 서비스 B를 네임스페이스 bar에 배포할 수 있습니다.

다음 예시에서 OrgA 조직에 구성된 Edge Micro게이트는 -n 옵션을 사용하여 foo 네임스페이스에 대한 서비스로 배포됩니다.

kubectl apply -f <(edgemicroctl -org=myorgA -env=test-key=0e3ecea28a64099410594406b30e54439af5265f8 -sec=e3919250bee37c69cb2e5b41170b488e1c1d -conf=/Users/joed/.edgemicro/orgA-test-config.yaml -svc=samples/helloworld/helloworld.yaml) -n foo

마찬가지로 다음 예시에서 OrgB 조직에 구성된 Edge Micro Gateway는 -n 옵션을 사용하여 bar 네임스페이스에 서비스로 배포됩니다.

kubectl apply -f <(edgemicroctl -org=myorgB -env=test-key=0e3ecea28a64099410594406b30e54439af5265f8 -sec=e3919250bee37c69cb2e5b41170b488e1c1d -conf=/Users/joed/.edgemicro/orgB-test-config.yaml -svc=samples/helloworld/helloworld.yaml) -n bar