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:
Schreiben und testen Sie Ihr Plug-in gemäß der Anleitung unter Einfaches Plug-in schreiben.
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-uppercaseundrequest-headerssind 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.jsonWechseln Sie mit
cdzum Ordnerplugin.Zipen Sie im Ordner
pluginden gesamten Ordnerpluginsfolder:zip -r plugins.zip plugins/
Docker-Image erstellen
- Erstellen Sie im selben Verzeichnis, in dem sich die ZIP-Datei befindet, eine neue Datei mit dem Namen
Dockerfile. Fügen Sie
Dockerfileden 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"]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.ioodergcr.io:docker build -t edgemicroplugins .docker tag edgemicroplugins container-registry/your-project/edgemicropluginsdocker push container-registry/your-project/edgemicropluginsBeispiel:
docker build -t edgemicroplugins .docker tag edgemicroplugins gcr.io/my-project/edgemicropluginsdocker push gcr.io/my-project/edgemicroplugins
Edge Microgateway-Konfiguration aktualisieren
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:
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 Befehledgemicro configureangegeben haben.your_environment: Die Umgebung, die Sie im Befehledgemicro configureangegeben haben.configuration_key: Der Schlüssel, der vom Befehledgemicro configurezurückgegeben wurde.configuration_secret: Das Secret, das vom Befehledgemicro configurezurückgegeben wurde.config_file_path: Der Pfad zur Edge Micro-Konfigurationsdatei, die vom Befehledgemicro configurezurückgegeben wurde.container-registry: Die Docker-Registry, in die Sie das Image übertragen haben. Beispiel:gcr.iooderdocker.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)
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.
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 Befehledgemicro configureangegeben haben.your_env: Die Umgebung, die Sie im Befehledgemicro configureangegeben haben.your_key: Der Schlüssel, der vom Befehledgemicro configurezurückgegeben wurde.your_secret: Das Secret, das vom Befehledgemicro configurezurückgegeben wurde.config_file_path: Der Pfad zur Edge Micro-Konfigurationsdatei, die vom Befehledgemicro configurezurückgegeben wurde.container-registry: Die Docker-Registry, in die Sie das Image übertragen haben. Beispiel:gcr.iooderdocker.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)
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.
Erstellen Sie eine Konfigurationsdatei
secret.yamlwie 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_CONFIGGeben Sie den base64-codierten Wert von
EDGEMICRO_ORG,EDGEMICRO_ENV,EDGEMICRO_KEYundEDGEMICRO_SECRETan: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'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
Codieren Sie den Inhalt der Konfigurationsdatei zweimal mit base64:
cat $HOME/.edgemicro/org-env-config.yaml | base64 | tr -d '\n' | base64 | tr -d '\n'
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.
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 1dLöschen Sie den Pod
edge-microgateway.kubectl delete pod edge-microgateway-57ccc7776b-g7nrg
Beispielausgabe:
pod "edge-microgateway-57ccc7776b-g7nrg" deletedRufen 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
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 1dDie Ausgabe zeigt, dass ein Replikat bereitgestellt wurde.
Skalieren Sie das Deployment von 1 auf eine beliebige Anzahl von Replikaten. In diesem Beispiel wird der Dienst
edge-microgatewayskaliert.kubectl scale deployment edge-microgateway --replicas=2
(Optional) Wenn Sie Autoscaling verwenden möchten, verwenden Sie diesen Befehl:
kubectl autoscale deployment edge-microgateway --cpu-percent=50 --min=1 --max=10
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 1dDer Status wurde so geändert, dass er zwei Replikate enthält.
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 1dDie 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