Kubernetes-Einbindungsaufgaben

Sie lesen gerade die Dokumentation zu Apigee Edge.
Zur Dokumentation zu Apigee X.
info

Benutzerdefiniertes Plug-in hinzufügen

Sie können dem Microgateway neue Funktionen hinzufügen, indem Sie benutzerdefinierte Plug-ins schreiben. Mit benutzerdefinierten Plug-ins können Sie programmatisch mit den Anfragen und Antworten interagieren, die durch das Microgateway fließen.

In diesem Abschnitt wird erläutert, wie Sie Plug-ins verpacken und in einer Edge Microgateway-Instanz bereitstellen, die in Ihrem Kubernetes-Cluster ausgeführt wird.

Im Rest dieses Abschnitts wird davon ausgegangen, dass Sie mit dem Schreiben und Konfigurieren von Plug-ins für eine Standardeinrichtung von Edge Microgateway vertraut sind. Wenn nicht, lesen Sie Benutzerdefinierte Plug-ins entwickeln.

Plug-ins verpacken

So verpacken Sie benutzerdefinierte Plug-ins:

  1. Schreiben und testen Sie Ihr Plug-in gemäß der Anleitung unter Einfaches Plug-in schreiben.

  2. Platzieren Sie den Plug-in-Code in der richtigen Verzeichnisstruktur. Plug-in-Verzeichnisse müssen einer bestimmten Struktur folgen. Das folgende Beispiel zeigt die Struktur, die Sie verwenden müssen. response-uppercase und request-headers sind die Namen von Ordnern, die benutzerdefinierten Plug-in-Code enthalten. Diese Namen sind nur Beispiele, Ihre Ordnernamen können abweichen:

    plugin
      |
      |-- plugins
        |
        |- response-uppercase
        |     |- index.js
        |     |- package.json
        |- request-headers
        |     | - index.js
              | - package.json
    
  3. Wechseln Sie mit cd zum Ordner plugin.

  4. Zipen Sie im Ordner plugin den gesamten Ordner plugins folder:

    zip -r plugins.zip plugins/

Docker-Image erstellen

  1. Erstellen Sie im selben Verzeichnis, in dem sich die ZIP-Datei befindet, eine neue Datei mit dem Namen Dockerfile.
  2. Fügen Sie Dockerfile den folgenden Code hinzu und speichern Sie die Datei:

    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. Erstellen Sie ein neues Edge Microgateway-Docker-Image mit Ihren Plug-ins und übertragen Sie das Image per Push in Ihre Docker-Registry. Sie können eine beliebige Registry verwenden, z. B. docker.io oder gcr.io:

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

    Beispiel:

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

Edge Microgateway-Konfiguration aktualisieren

  1. Fügen Sie die Plug-ins der Edge Microgateway-Konfigurationsdatei hinzu. Die Konfigurationsdatei finden Sie hier:

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

    Beispiel:

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

In der folgenden Beispielkonfiguration wurde das benutzerdefinierte Plug-in response-uppercase hinzugefügt. Das Plug-in oauth war standardmäßig bereits vorhanden.

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

Kubernetes-Cluster aktualisieren

Im letzten Schritt wenden Sie die Konfigurationsänderung auf Ihren Kubernetes-Cluster an. Kubernetes ruft das neue Image mit dem Plug-in-Code ab, den Sie in die Container-Registry übertragen haben, und verwendet es für alle neu erstellten Pods.

Wenn Sie Edge Microgateway als Dienst bereitgestellt haben

Verwenden Sie den Befehl edgemicroctl, um die aktualisierte Edge Microgateway-Konfiguration einzufügen:

  1. Aktualisieren Sie das Edge Microgateway-Deployment mit dem neuen Image. Beispiel:

    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)

    Dabei gilt:

    • your_organization : Die Apigee-Organisation, die Sie im Befehl edgemicro configure angegeben haben.
    • your_environment : Die Umgebung, die Sie im Befehl edgemicro configure angegeben haben.
    • configuration_key : Der Schlüssel, der vom Befehl edgemicro configure zurückgegeben wurde.
    • configuration_secret : Das Secret, das vom Befehl edgemicro configure zurückgegeben wurde.
    • config_file_path : Der Pfad zur Edge Micro-Konfigurationsdatei, die vom Befehl edgemicro configure zurückgegeben wurde.
    • container-registry : Die Docker-Registry, in die Sie das Image übertragen haben. Beispiel: gcr.io oder docker.io.
    • your_project_name : Der Projektname für das Docker-Repository, in das Sie das Docker-Image übertragen haben.
    • image_name : Der Name des Docker-Images, das Sie übertragen haben.

    Beispiel:

    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. Testen Sie das Plug-in. Rufen Sie die API auf, um zu prüfen, ob Sie das erwartete Verhalten erhalten. Beim Plug-in „response uppercase“ wird der Antworttext beispielsweise in Großbuchstaben umgewandelt, wie unten gezeigt:

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

    Ausgabe:

    HELLO WORLD
    
Neue Konfiguration manuell einfügen

Die manuelle Einschleusung ist ein unkomplizierter Ansatz, bei dem Sie die neue Konfiguration über die Befehlszeile einschleusen.

  1. Führen Sie folgenden Befehl aus:

    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)

    Dabei gilt:

    • your_org : Die Apigee-Organisation, die Sie im Befehl edgemicro configure angegeben haben.
    • your_env : Die Umgebung, die Sie im Befehl edgemicro configure angegeben haben.
    • your_key : Der Schlüssel, der vom Befehl edgemicro configure zurückgegeben wurde.
    • your_secret : Das Secret, das vom Befehl edgemicro configure zurückgegeben wurde.
    • config_file_path : Der Pfad zur Edge Micro-Konfigurationsdatei, die vom Befehl edgemicro configure zurückgegeben wurde.
    • container-registry : Die Docker-Registry, in die Sie das Image übertragen haben. Beispiel: gcr.io oder docker.io.
    • your_project_name : Der Projektname für das Docker-Repository, in das Sie das Docker-Image übertragen haben.
    • image_name : Der Name des Docker-Images, das Sie übertragen haben.
    • service_deployment_file : Der Pfad zur Deployment-Datei des Dienstes, für den die Plug-ins gelten. Beispiel: samples/helloworld/helloworld.yaml.

    Beispiel:

    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. Testen Sie das Plug-in. Rufen Sie die Dienst-API auf, um zu prüfen, ob Sie das erwartete Verhalten erhalten. Beim Plug-in „response uppercase“ wird der Antworttext beispielsweise in Großbuchstaben umgewandelt, wie unten gezeigt:

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

    Ausgabe:

    HELLO WORLD
    

Edge Microgateway-Konfiguration ändern

In einigen Fällen müssen Sie möglicherweise die Edge Microgateway-Konfiguration ändern. Beispielsweise möchten Sie Edge Microgateway ein neues Plug-in hinzufügen oder einen Konfigurationsparameter ändern. In diesem Abschnitt wird erläutert, wie Sie Konfigurationsänderungen an Edge Microgateway vornehmen und anwenden, das in Kubernetes ausgeführt wird.

  1. Erstellen Sie eine Konfigurationsdatei secret.yaml wie unten gezeigt:

    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. Geben Sie den base64-codierten Wert von EDGEMICRO_ORG, EDGEMICRO_ENV, EDGEMICRO_KEY und EDGEMICRO_SECRET an:

    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. Nehmen Sie die gewünschten Änderungen an der Edge Microgateway-Konfigurationsdatei für Ihre Organisation und Umgebung vor:

    $HOME/.edgemicro/your_org-your_env-config.yaml
  4. Codieren Sie den Inhalt der Konfigurationsdatei zweimal mit base64:

    cat $HOME/.edgemicro/org-env-config.yaml | base64 | tr -d '\n' | base64  | tr -d '\n'
  5. Wenden Sie die Änderungen auf Kubernetes im Namespace an, in dem der Dienst ausgeführt wird.

    kubectl apply -f secret.yaml -n 

Diese neuen Änderungen werden nicht automatisch von vorhandenen Microgateway-Pods übernommen. Die neuen Pods erhalten jedoch die Änderungen. Sie können den vorhandenen Pod löschen, damit das Deployment einen neuen Pod erstellt, der die Änderung übernimmt.

Beispieldienst

Das folgende Beispiel zeigt, wie Sie ein Dienst-Deployment mit einem neuen Image aktualisieren.

  1. Rufen Sie die Pods ab.

    kubectl get pods

    Beispielausgabe:

    NAME                                 READY     STATUS    RESTARTS   AGE
    edge-microgateway-57ccc7776b-g7nrg   1/1       Running   0          19h
    helloworld-6987878fc4-cltc2          1/1       Running   0          1d
    
  2. Löschen Sie den Pod edge-microgateway.

    kubectl delete pod edge-microgateway-57ccc7776b-g7nrg

    Beispielausgabe:

    pod "edge-microgateway-57ccc7776b-g7nrg" deleted
    
  3. Rufen Sie die Pods noch einmal ab. Ein neuer Pod wird gestartet und übernimmt Ihre Konfigurationsänderungen.

    kubectl get pods

    Beispielausgabe:

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

Deployment skalieren

In diesem Abschnitt wird erläutert, wie Sie Ihre Deployments mit den Kubernetes-Skalierungsprinzipien skalieren können.

Dienst-Deployment skalieren

  1. Prüfen Sie die Deployments:

    kubectl get deployments

    Beispielausgabe:

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

    Die Ausgabe zeigt, dass ein Replikat bereitgestellt wurde.

  2. Skalieren Sie das Deployment von 1 auf eine beliebige Anzahl von Replikaten. In diesem Beispiel wird der Dienst edge-microgateway skaliert.

    kubectl scale deployment edge-microgateway --replicas=2
  3. (Optional) Wenn Sie Autoscaling verwenden möchten, verwenden Sie diesen Befehl:

    kubectl autoscale deployment edge-microgateway --cpu-percent=50 --min=1 --max=10
  4. Prüfen Sie die Deployments, um zu bestätigen, dass die Skalierung aktiviert ist:

    kubectl get deployments

    Beispielausgabe:

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

    Der Status wurde so geändert, dass er zwei Replikate enthält.

  5. Prüfen Sie die Pods:

    kubectl get pods

    Beispielausgabe:

    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
    

    Die Ausgabe zeigt, dass sich beide Replikate im Status „Wird ausgeführt“ befinden.

Namespaces für mehrere Edge Microgateway-Konfigurationen verwenden

Sie können mehrere Instanzen von Edge Microgateway-Diensten in Ihrem Kubernetes-Cluster bereitstellen und konfigurieren. In diesem Anwendungsfall können Sie jede Microgateway-Instanz mit eigenen Plug-ins und Parametern konfigurieren. Beispiel:

  • Für den Edge Microgateway-Dienst A ist nur das Plug-in für die Spike-Arrest-Richtlinie erforderlich.
  • Für den Edge Microgateway-Dienst B sind das Plug-in für die Kontingentrichtlinie und das OAuth-Plug-in erforderlich, aber nicht das Plug-in für die Spike-Arrest-Richtlinie.

Verwenden Sie für diesen Anwendungsfall Namespaces von Kubernetes. Sie können beispielsweise den Edge Microgateway-Dienst A im Namespace foo und den Edge Microgateway-Dienst B im Namespace bar bereitstellen.

Im folgenden Beispiel wird Edge Microgateway, das in der Organisation OrgA konfiguriert wurde, mit der Option -n als Dienst im Namespace foo bereitgestellt:

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

Ebenso wird im folgenden Beispiel Edge Microgateway, das in der Organisation OrgB konfiguriert wurde, mit der Option -n als Dienst im Namespace bar bereitgestellt:

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