Kubernetes 통합 태스크

Apigee Edge 문서입니다.
Apigee X 문서로 이동
정보

맞춤 플러그인 추가

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

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

이 섹션의 나머지 부분에서는 표준 Edge Microgateway 설정의 플러그인을 작성하고 구성하는 방법을 알고 있다고 가정합니다. 그렇지 않으면 맞춤 플러그인 개발을 참고하세요.

플러그인 패키징

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

  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 Microgateway 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 Microgateway 구성 업데이트

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

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

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

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

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

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

Kubernetes 클러스터 업데이트

마지막 단계는 Kubernetes 클러스터에 구성 변경사항을 적용하는 것입니다. Kubernetes는 컨테이너 저장소에 푸시한 플러그인 코드가 포함된 새 이미지를 가져와 새로 만든 포드에 사용합니다.

Edge Microgateway를 서비스로 배포한 경우

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

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

    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를 호출하여 예상되는 동작이 발생하는지 확인합니다. 예를 들어 'response uppercase' 플러그인의 경우 응답 텍스트가 아래와 같이 모두 대문자로 변환됩니다.

    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 Microgateway 구성 변경

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

  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. EDGEMICRO_ORG, EDGEMICRO_ENV, EDGEMICRO_KEY, EDGEMICRO_SECRET의 base64 인코딩 값을 지정합니다.

    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 Microgateway 구성 파일을 변경합니다.

    $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 

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

서비스 예시

다음 예는 새

  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 pod를 삭제합니다.

    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
    

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

  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 Microgateway 구성에 네임스페이스 사용

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

  • Edge Microgateway 서비스 A에는 급격한 증가 방지 플러그인만 필요합니다.
  • Edge Microgateway 서비스 B에는 할당량 및 oauth 플러그인이 필요하지만 급격한 증가 방지는 필요하지 않습니다.

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

다음 예에서는 조직 OrgA에 구성된 Edge Microgateway가 -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 Microgateway가 -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