So erstellen Sie ein API-Gateway mit Ambassador unter DigitalOcean Kubernetes

Der Autor hat dieFree and Open Source Fundausgewählt, um eine Spende im Rahmen desWrite for DOnations-Programms zu erhalten.

Einführung

Ambassador ist ein API-Gateway für Cloud-native Anwendungen, das den Datenverkehr zwischen heterogenen Diensten weiterleitet und dezentrale Workflows verwaltet. Es fungiert als ein einziger Einstiegspunkt und unterstützt Aufgaben wie Serviceerkennung, Konfigurationsverwaltung, Routingregeln und Ratenbegrenzung. Es bietet große Flexibilität und einfache Konfiguration für Ihre Dienste.

Envoy ist ein Open-Source-Service-Proxy für Cloud-native Anwendungen. In Kubernetes kann Ambassador zum Installieren und Verwalten der Envoy-Konfiguration verwendet werden. Ambassador unterstützt Konfigurationsänderungen ohne Ausfallzeiten und die Integration mit anderen Funktionen wie Authentifizierung, Serviceerkennung undservices meshes.

In diesem Lernprogramm richten Sie mit Helm ein Ambassador-API-Gateway in einem Kubernetes-Cluster ein und konfigurieren es für die Weiterleitung des eingehenden Datenverkehrs an verschiedene Dienste basierend auf den Weiterleitungsregeln. Sie konfigurieren diese Regeln, um den Datenverkehr basierend auf dem Hostnamen oder dem Pfad zu den relevanten Diensten weiterzuleiten.

Voraussetzungen

Bevor Sie mit diesem Handbuch beginnen, benötigen Sie Folgendes:

  • Ein DigitalOcean Kubernetes-Cluster mitkubectlkonfiguriert. Informationen zum Erstellen eines Kubernetes-Clusters auf DigitalOcean finden Sie in unserenKubernetes Quickstart.

  • Der Helm-Paket-Manager ist auf Ihrem lokalen Computer installiert, und Tiller ist auf Ihrem Cluster installiert. Führen Sie die Schritte 1 und 2 vonHow To Install Software on Kubernetes Clusters with the Helm Package Manager aus

  • Ein vollständig registrierter Domänenname mit mindestens zwei konfigurierten A-Einträgen. In diesem Lernprogramm werden durchgehendsvc1.your-domain,svc2.your-domain undsvc3.your-domain verwendet. Sie können denDNS Quickstart folgen, um Ihre Datensätze auf DigitalOcean einzurichten.

[[Schritt 1 - Installation des Botschafters]] == Schritt 1 - Installation des Botschafters

In diesem Abschnitt installieren Sie Ambassador auf Ihrem Kubernetes-Cluster. Ambassador kann mithilfe eines Helmdiagramms oder durch Übergeben einer YAML-Konfigurationsdatei an den Befehlkubectlinstalliert werden.

[.note] #Note: Bei DigitalOcean Kubernetes istRBAC standardmäßig aktiviert. Wenn Sie also eine YAML-Konfigurationsdatei für die Installation verwenden, müssen Sie sicherstellen, dass Sie die RBAC-fähige verwenden. Weitere Informationen zum Bereitstellen von Amabassador für Kubernetes über YAML finden Sie indocumentation.
# von Ambassador.

Für die Zwecke dieses Lernprogramms verwenden Sie einHelm-Diagramm, um Ambassador in Ihrem Cluster zu installieren. Nachdem Sie die Voraussetzungen erfüllt haben, muss Helm auf Ihrem Cluster installiert sein.

Führen Sie zunächst den folgenden Befehl aus, um Ambassador über Helm zu installieren:

helm upgrade --install --wait ambassador stable/ambassador

Es wird eine Ausgabe ähnlich der folgenden angezeigt:

OutputRelease "ambassador" does not exist. Installing it now.
NAME:   ambassador
LAST DEPLOYED: Tue Jun 18 02:15:00 2019
NAMESPACE: default
STATUS: DEPLOYED

RESOURCES:
==> v1/Deployment
NAME        READY  UP-TO-DATE  AVAILABLE  AGE
ambassador  3/3    3           3          2m39s

==> v1/Pod(related)
NAME                         READY  STATUS   RESTARTS  AGE
ambassador-7d55c468cb-4gpq9  1/1    Running  0         2m38s
ambassador-7d55c468cb-jr9zr  1/1    Running  0         2m38s
ambassador-7d55c468cb-zhm7l  1/1    Running  0         2m38s

==> v1/Service
NAME               TYPE          CLUSTER-IP      EXTERNAL-IP    PORT(S)                     AGE
ambassador         LoadBalancer  10.245.183.114  139.59.52.164  80:30001/TCP,443:31557/TCP  2m40s
ambassador-admins  ClusterIP     10.245.46.43             8877/TCP                    2m41s

==> v1/ServiceAccount
NAME        SECRETS  AGE
ambassador  1        2m43s

==> v1beta1/ClusterRole
NAME        AGE
ambassador  2m41s

==> v1beta1/ClusterRoleBinding
NAME        AGE
ambassador  2m41s

==> v1beta1/CustomResourceDefinition
NAME                                          AGE
authservices.getambassador.io                 2m42s
consulresolvers.getambassador.io              2m41s
kubernetesendpointresolvers.getambassador.io  2m42s
kubernetesserviceresolvers.getambassador.io   2m43s
mappings.getambassador.io                     2m41s
modules.getambassador.io                      2m41s
ratelimitservices.getambassador.io            2m42s
tcpmappings.getambassador.io                  2m41s
tlscontexts.getambassador.io                  2m42s
tracingservices.getambassador.io              2m43s

. . .

Dadurch werden eine Ambassador-Bereitstellung, ein Ambassador-Dienst und ein Load Balancer erstellt, an den die Kubernetes-Clusterknoten angeschlossen sind. Sie benötigen die IP-Adresse des Load Balancers, um sie den A-Einträgen Ihrer Domain zuzuordnen.

Führen Sie die folgenden Schritte aus, um die IP-Adresse Ihres Ambassador Load Balancer abzurufen:

kubectl get svc --namespace default ambassador

Sie sehen eine Ausgabe ähnlich der folgenden:

OutputNAME         TYPE           CLUSTER-IP       EXTERNAL-IP     PORT(S)                      AGE
ambassador   LoadBalancer   your_cluster_IP   your-IP-address   80:30001/TCP,443:31557/TCP   8m4s

Beachten Sie die externen IPyour-IP-addressin diesem Schritt und ordnen Sie die Domänen (über Ihren Domain-Anbieter)svc1.your-domain,svc2.your-domain undsvc3.your-domain zu, um auf diese IP-Adresse zu verweisen.

Sie können HTTPS mit Ihrem DigitalOcean Load Balancer mithilfe der unterHow to Configure SSL Termination angegebenen Schritte aktivieren. Es wird empfohlen, die TLS-Terminierung über den Load Balancer zu konfigurieren. Eine andere Möglichkeit zum Konfigurieren der TLS-Terminierung ist die Verwendung vonAmbassador’s TLS Support

Sie haben Ambassador mithilfe von Helm auf Ihrem Kubernetes-Cluster installiert. Dabei wurde eine Ambassador-Bereitstellung mit drei Replikaten im Standardnamespace erstellt. Dadurch wurde auch ein Load Balancer mit einer öffentlichen IP-Adresse erstellt, um den gesamten Datenverkehr an das API-Gateway weiterzuleiten. Als Nächstes erstellen Sie Kubernetes-Bereitstellungen für drei verschiedene Dienste, die Sie zum Testen dieses API-Gateways verwenden.

[[Schritt-2 - Einrichten von Webserver-Bereitstellungen]] == Schritt 2 - Einrichten von Webserver-Bereitstellungen

In diesem Abschnitt erstellen Sie drei Bereitstellungen, um drei verschiedene Webserver-Container auszuführen. Sie erstellen YAML-Dateien mit Definitionen von Kubernetes-Bereitstellungen für die drei verschiedenen Webservercontainer und stellen sie mitkubectl bereit.

Öffnen Sie Ihren bevorzugten Texteditor, um Ihre erste Bereitstellung für einen Nginx-Webserver zu erstellen:

nano svc1-deploy.yaml

Geben Sie die folgende Yaml-Konfiguration in Ihre Datei ein:

svc1-deploy.yaml

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: svc1
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
      name: svc1
  strategy:
    type: RollingUpdate
  template:
    metadata:
      labels:
        app: nginx
        name: svc1
    spec:
      containers:
      - name: nginx
        image: nginx:latest
        ports:
        - name: http
          containerPort: 80

Hier haben Sie ein KubernetesDeployment mit demnginx:latest-Container-Image definiert, das mit dem1-Replikat bereitgestellt werden soll, das alssvc1 bezeichnet wird. Deployment ist so definiert, dass In-Cluster an Port80 verfügbar gemacht wird.

Speichern und schließen Sie die Datei.

Führen Sie dann den folgenden Befehl aus, um diese Konfiguration anzuwenden:

kubectl apply -f svc1-deploy.yaml

Die Ausgabe bestätigt die Erstellung:

Outputdeployment.extensions/svc1 created

Erstellen Sie jetzt eine zweite Webserverbereitstellung. Öffnen Sie eine Datei mit dem Namensvc2-deploy.yaml mit:

nano svc2-deploy.yaml

Geben Sie die folgende YAML-Konfiguration in die Datei ein:

svc2-deploy.yaml

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: svc2
spec:
  replicas: 1
  selector:
    matchLabels:
      app: httpd
      name: svc2
  strategy:
    type: RollingUpdate
  template:
    metadata:
      labels:
        app: httpd
        name: svc2
    spec:
      containers:
      - name: httpd
        image: httpd:latest
        ports:
        - name: http
          containerPort: 80

Hier haben Sie ein KubernetesDeployment mit demhttpd-Container-Image definiert, das mit dem1-Replikat bereitgestellt werden soll, das alssvc2 bezeichnet wird.

Speichern und schließen Sie die Datei.

Führen Sie den folgenden Befehl aus, um diese Konfiguration anzuwenden:

kubectl apply -f svc2-deploy.yaml

Sie sehen diese Ausgabe:

Outputdeployment.extensions/svc2 created

Öffnen und erstellen Sie abschließend für die dritte Bereitstellung die Dateisvc3-deploy.yaml:

nano svc3-deploy.yaml

Fügen Sie der Datei die folgenden Zeilen hinzu:

svc3-deploy.yaml

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: svc3
spec:
  replicas: 1
  selector:
    matchLabels:
      app: httpbin
      name: svc3
  strategy:
    type: RollingUpdate
  template:
    metadata:
      labels:
        app: httpbin
        name: svc3
    spec:
      containers:
      - name: httpbin
        image: kennethreitz/httpbin:latest
        ports:
        - name: http
          containerPort: 80

Hier haben Sie ein KubernetesDeployment mit demhttpbin-Container-Image definiert, das mit dem1-Replikat bereitgestellt werden soll, das alssvc3 bezeichnet wird.

Speichern und schließen Sie die Datei.

Führen Sie abschließend den folgenden Befehl aus, um ihn anzuwenden:

kubectl apply -f svc3-deploy.yaml

Die folgende Ausgabe wird angezeigt:

Outputdeployment.extensions/svc3 created

Sie haben drei Webserver-Container mithilfe von Kubernetes-Bereitstellungen bereitgestellt. Im nächsten Schritt werden Sie diese Bereitstellungen dem Internetverkehr aussetzen.

[[Schritt 3 - Anzeigen von Apps mithilfe von Diensten mit Botschafteranmerkungen verfügbar machen]] == Schritt 3 - Anzeigen von Apps mithilfe von Diensten mit Botschafteranmerkungen verfügbar machen

In diesem Abschnitt stellen Sie Ihre Webanwendungen dem Internet zur Verfügung und erstellen Kubernetes Services mitAmbassador annotations, um Regeln für die Weiterleitung des Datenverkehrs an sie zu konfigurieren. Mit Anmerkungen in Kubernetes können Sie Objekten Metadaten hinzufügen. Ambassador verwendet diese Annotation-Werte von Diensten, um seine Routing-Regeln zu konfigurieren.

Zur Erinnerung müssen Ihre Domains (z. B.svc1.your-domain,svc2.your-domain undsvc3.your-domain) in Ihren DNS-Einträgen der öffentlichen IP des Load Balancers zugeordnet sein.

Definieren Sie einen Kubernetes-Dienst für die Bereitstellung vonsvc1mit Ambassador-Anmerkungen, indem Sie diese Datei erstellen und öffnen:

nano svc1-service.yaml

[.note] #Note: Der Zuordnungsname sollte für jeden Ambassador-Anmerkungsblock eindeutig sein. Die Zuordnung fungiert als Kennung für jeden Anmerkungsblock und überlappt bei Wiederholung den älteren Anmerkungsblock.
#

svc1-service.yaml

apiVersion: v1
kind: Service
metadata:
  name: svc1
  annotations:
    getambassador.io/config: |
      ---
      apiVersion: ambassador/v1
      kind: Mapping
      name: svc1-service_mapping
      host: svc1.your-domain
      prefix: /
      service: svc1:80
spec:
  selector:
    app: nginx
    name: svc1
  ports:
  - name: http
    protocol: TCP
    port: 80

In diesem YAML-Code haben Sie einen Kubernetes-Dienstsvc1 mit Ambassador-Anmerkungen definiert, um diesem Dienst den Hostnamensvc1.your-domain zuzuordnen.

Speichern und beenden Siesvc1-service.yaml und führen Sie dann Folgendes aus, um diese Konfiguration anzuwenden:

kubectl apply -f svc1-service.yaml

Sie sehen diese Ausgabe:

Outputservice/svc1 created

Erstellen Sie Ihren zweiten Kubernetes-Dienst für die Bereitstellung vonsvc2mit Ambassador-Anmerkungen. Dies ist ein weiteres Beispiel für hostbasiertes Routing mit Ambassador:

svc2-service.yaml

Fügen Sie der Datei die folgende Konfiguration hinzu:

svc2-service.yaml

apiVersion: v1
kind: Service
metadata:
  name: svc2
  annotations:
    getambassador.io/config: |
      ---
      apiVersion: ambassador/v1
      kind: Mapping
      name: svc2-service_mapping
      host: svc2.your-domain
      prefix: /
      service: svc2:80
spec:
  selector:
    app: httpd
    name: svc2
  ports:
  - name: http
    protocol: TCP
    port: 80

Speichern Sie dies alssvc2-service.yaml. Hier haben Sie einen anderen Kubernetes-Dienst mit Ambassador-Anmerkungen definiert, um den Datenverkehr ansvc2 weiterzuleiten, wenn eine Anfrage bei Ambassador mit dem Header-Werthostalssvc2.your-domain eingeht. Daher können Sie mit diesem hostbasierten Routing eine Anfrage an die Subdomainsvc2.your-domain senden, die den Datenverkehr an den Dienstsvc2 weiterleitet und Ihre Anfrage vom Webserver vonhttpdaus bearbeitet.

Führen Sie die folgenden Schritte aus, um diesen Service zu erstellen:

kubectl apply -f svc2-service.yaml

Sie sehen die folgende Ausgabe:

Outputservice/svc2 created

Erstellen Sie einen dritten Kubernetes-Dienst für die Bereitstellung vonsvc3und stellen Sie ihn über den Pfadsvc2.your-domain/bin bereit. Dadurch wird das pfadbasierte Routing für Ambassador konfiguriert:

svc3-service.yaml

apiVersion: v1
kind: Service
metadata:
  name: svc3
spec:
  selector:
    app: httpbin
    name: svc3
  ports:
  - name: http
    protocol: TCP
    port: 80

Speichern Sie dies alssvc3-service.yaml und führen Sie Folgendes aus, um die Konfiguration anzuwenden:

kubectl apply -f svc3-service.yaml

Ihre Ausgabe wird sein:

Outputservice/svc3 created

Bearbeiten Siesvc2-service.yaml, um den zweiten Ambassador-Anmerkungsblock an die Weiterleitung von/bin ansvc3 Dienst anzuhängen:

nano svc2-service.yaml

svc2-service.yaml

apiVersion: v1
kind: Service
metadata:
  name: svc2
  annotations:
    getambassador.io/config: |
      ---
      apiVersion: ambassador/v1
      kind: Mapping
      name: svc2-service_mapping
      host: svc2.your-domain
      prefix: /
      service: svc2:80
      ---
      apiVersion: ambassador/v1
      kind: Mapping
      name: svc3-service_mapping
      host: svc2.your-domain
      prefix: /bin
      service: svc3:80
spec:
  selector:
    app: httpd
    name: svc2
  ports:
  - name: http
    protocol: TCP
    port: 80

Sie haben den zweiten Ambassador-Anmerkungsblock hinzugefügt, um Pfade zu konfigurieren, die mit/bin beginnen, um sie Ihrem Kubernetes-Dienstsvc3zuzuordnen. Um Anforderungen fürsvc2.your-domain/bin ansvc3 weiterzuleiten, haben Sie hier den zweiten Anmerkungsblock als Hostwertsvc2.your-domain hinzugefügt, der für beide Blöcke gleich ist. Daher können Sie mit dem pfadbasierten Routing eine Anforderung ansvc2.your-domain/bin senden, die vom Dienstsvc3 empfangen und von der Anwendunghttpbin in diesem Lernprogramm bereitgestellt wird

Führen Sie nun Folgendes aus, um die Änderungen zu übernehmen:

kubectl apply -f svc2-service.yaml

Sie sehen diese Ausgabe:

Outputservice/svc2 configured

Sie haben Kubernetes Services für die drei Bereitstellungen erstellt und hostbasierte und pfadbasierte Routingregeln mit Ambassador-Anmerkungen hinzugefügt. Als Nächstes fügen Sie diesen Diensten eine erweiterte Konfiguration hinzu, um Routing, Umleitung und benutzerdefinierte Header zu konfigurieren.

[[Schritt 4 - Erweiterte Ambassador-Konfigurationen für das Routing] == Schritt 4 - Erweiterte Ambassador-Konfigurationen für das Routing

In diesem Abschnitt konfigurieren Sie die Dienste mit weiteren Ambassador-Anmerkungen zumodify headers undconfigure redirection.

curl die Domänesvc1.your-domain und überprüfen Sie die Antwortheader:

curl -I svc1.your-domain

Ihre Ausgabe sieht ungefähr so ​​aus:

OutputHTTP/1.1 200 OK
server: envoy
date: Mon, 17 Jun 2019 21:41:00 GMT
content-type: text/html
content-length: 612
last-modified: Tue, 21 May 2019 14:23:57 GMT
etag: "5ce409fd-264"
accept-ranges: bytes
x-envoy-upstream-service-time: 0

Diese Ausgabe zeigt die vom mit Ambassador weitergeleiteten Dienst empfangenen Header an. Sie fügen Ihrer Serviceantwort mithilfe von Ambassador-Anmerkungen benutzerdefinierte Header hinzu und validieren die Ausgabe auf neu hinzugefügte Header.

Um Ihrer Serviceantwort benutzerdefinierte Header hinzuzufügen, entfernen Sie den Headerx-envoy-upstream-service-time aus der Antwort und fügen Sie einen neuen Antwortheaderx-geo-location: India fürsvc1 hinzu. (Sie können diesen Header gemäß Ihren Anforderungen ändern.)

Bearbeiten Sie die Dateisvc1-service.yaml:

nano svc1-service.yaml

Aktualisieren Sie die Anmerkung mit den folgenden hervorgehobenen Zeilen:

svc1-service.yaml

apiVersion: v1
kind: Service
metadata:
  name: svc1
  annotations:
    getambassador.io/config: |
      ---
      apiVersion: ambassador/v1
      kind: Mapping
      name: svc1-service_mapping
      host: svc1.example.com
      prefix: /
      remove_response_headers:
      - x-envoy-upstream-service-time
      add_response_headers:
        x-geo-location: India
      service: svc1:80
spec:
  selector:
    app: nginx
    name: svc1
  ports:
  - name: http
    protocol: TCP
    port: 80

Hier haben Sie den Dienstsvc1geändert, umx-envoy-upstream-service-time zu entfernen, und den Headerx-geo-location: India in die HTTP-Antwort eingefügt.

Übernehmen Sie die vorgenommenen Änderungen:

kubectl apply -f svc1-service.yaml

Sie werden die folgende Ausgabe sehen:

Outputservice/svc1 configured

Führen Sie nuncurl aus, um die aktualisierten Header in der Serviceantwort zu überprüfen:

curl -I svc1.your-domain

Die Ausgabe wird ungefähr so ​​aussehen:

OutputHTTP/1.1 200 OK
server: envoy
date: Mon, 17 Jun 2019 21:45:26 GMT
content-type: text/html
content-length: 612
last-modified: Tue, 21 May 2019 14:23:57 GMT
etag: "5ce409fd-264"
accept-ranges: bytes
x-geo-location: India

Bearbeiten Sie nunsvc3-service.yaml, um Anforderungen für Ihren Hostnamensvc3.your-domain an Pfadsvc2.your-domain/bin umzuleiten:

nano svc3-service.yaml

Fügen Sie den Ambassador-Anmerkungsblock an, wie in der folgenden YAML gezeigt, und speichern Sie ihn:

svc3-service.yaml

apiVersion: v1
kind: Service
metadata:
  name: svc3
  annotations:
    getambassador.io/config: |
      ---
      apiVersion: ambassador/v1
      kind:  Mapping
      name:  redirect_mapping
      host: svc3.your-domain
      prefix: /
      service: svc2.your-domain
      host_redirect: true
      path_redirect: /bin
spec:
  selector:
    app: httpbin
    name: svc3
  ports:
  - name: http
    protocol: TCP
    port: 80

Sie habenhost_redirect: true hinzugefügt, um eine 301-Umleitungsantwort fürsvc3 bissvc2.your-domain/bin für den Hostnamensvc3.your-domain zu konfigurieren. Der Parameterhost_redirect sendet eine 301-Umleitungsantwort an den Client. Wenn nicht festgelegt, erhalten die Anforderungen 200 HTTP-Antworten anstelle von 301 HTTP-Antworten.

Führen Sie nun den folgenden Befehl aus, um diese Änderungen zu übernehmen:

kubectl apply -f svc3-service.yaml

Sie sehen eine ähnliche Ausgabe wie:

Outputservice/svc3 configured

Sie können jetzt die Antwort fürsvc3.your-domain mitcurl überprüfen:

curl -I svc3.your-domain

Ihre Ausgabe sieht ungefähr so ​​aus:

OutputHTTP/1.1 301 Moved Permanently
location: http://svc2.your-domain/bin
date: Mon, 17 Jun 2019 21:52:05 GMT
server: envoy
transfer-encoding: chunked

Die Ausgabe ist ein HTTP-Header für die Antwort der Anforderung auf den Dienstsvc3.your-domain+`showing that the configuration of `+host_redirect: true in Ihrer Dienstanmerkung, der den HTTP-Statuscode301 Moved Permanently korrekt angegeben hat.

Sie haben den Dienst mit Ambassador-Anmerkungen konfiguriert, um HTTP-Header zu ändern und Umleitungen zu konfigurieren. Als Nächstes fügen Sie dem Ambassador API Gateway-Dienst eine globale Konfiguration hinzu.

[[Schritt 5 - Einrichten von globalen Ambassador-Konfigurationen]] == Schritt 5 - Einrichten globaler Ambassador-Konfigurationen

In diesem Abschnitt bearbeiten Sie den Ambassador-Dienst, um eine globale GZIP-Komprimierungskonfiguration hinzuzufügen. Durch die GZIP-Komprimierung wird die Größe der HTTP-Assets komprimiert und die Anforderungen an die Netzwerkbandbreite reduziert, was zu schnelleren Antwortzeiten für die Web-Clients führt. Diese Konfiguration wirkt sich auf den gesamten Datenverkehr aus, der über das Ambassador-API-Gateway geleitet wird. Ebenso können Sie mit Ambassador andere globale Module konfigurieren, mit denen Sie spezielle Verhaltensweisen für Ambassador auf globaler Ebene aktivieren können. Diese globalen Konfigurationen können mithilfe von Anmerkungen auf den Ambassador-Dienst angewendet werden. Weitere Informationen finden Sie in der Dokumentation zuAmbassador’s Global Configuration.

Der folgende Befehlkubectl edit öffnet den Standardeditor vim. Um beispielsweise Nano zu verwenden, können Sie die UmgebungsvariableKUBE_EDITOR auf Nano setzen:

export KUBE_EDITOR="nano"

Bearbeiten Sie den Botschafterdienst:

kubectl edit service ambassador

Fügen Sie nun die markierten Zeilen zu einem neuen Anmerkungsblock für die GZIP-Komprimierung hinzu:

Bearbeiten von Ambassador Service

apiVersion: v1
kind: Service
metadata:
  annotations:
    getambassador.io/config: |
      ---
      apiVersion: ambassador/v1
      kind: Module
      name: ambassador
      config:
        service_port: 8080
      ---
      apiVersion: ambassador/v0
      kind:  Module
      name:  ambassador
      config:
        gzip:
          memory_level: 5
          min_content_length: 256
          compression_level: BEST
          compression_strategy: DEFAULT
          content_type:
          - application/javascript
          - application/json
          - text/html
          - text/plain
          disable_on_etag_header: false
          remove_accept_encoding_header: false
  creationTimestamp: "2019-06-17T20:45:04Z"
  labels:
    app.kubernetes.io/instance: ambassador
    app.kubernetes.io/managed-by: Tiller
    app.kubernetes.io/name: ambassador
    helm.sh/chart: ambassador-2.8.2
  name: ambassador
  namespace: default
  resourceVersion: "2153"
  . . .

Sie haben den Ambassador-Anmerkungsblock zu Ihrem Ambassador-Dienst hinzugefügt und GZIP global für das API-Gateway konfiguriert. Hier haben Sie eine Konfiguration zur Steuerung der Menge des internen Speichers eingefügt, der mitmemory_level verwendet wird. Dies kann ein Wert zwischen 1 und 9 sein. Die aufBEST eingestelltencompression_level gewährleisten eine höhere Komprimierungsrate auf Kosten einer höheren Latenz. Mitmin_content_length haben Sie die minimale Antwortlänge auf256 Bytes konfiguriert. Fürcontent_type haben Sie speziell eine Reihe vonmedia types (früher MIME-Typen) eingefügt, die eine Komprimierung ermöglichen. Schließlich haben Sie die letzten beiden Konfigurationen alsfalse hinzugefügt, um die Komprimierung zu ermöglichen.

Weitere Informationen zur GZIP-Komprimierung fürEnvoy’s GZIP page finden Sie hier.

Alle Änderungen in diesem Dienst gelten als globale Konfigurationen für das API-Gateway.

Nach dem Verlassen des Editors wird eine Ausgabe ähnlich der folgenden angezeigt:

Outputservice/ambassador edited

Überprüfen Siesvc1.your-domain mitcurl auf den Headercontent-encoding mit dem Wertgzip:

curl --compressed -i http://svc1.example.com

Die Ausgabe wird ungefähr so ​​aussehen:

OutputHTTP/1.1 200 OK
server: envoy
date: Mon, 17 Jun 2019 22:25:35 GMT
content-type: text/html
last-modified: Tue, 21 May 2019 14:23:57 GMT
accept-ranges: bytes
x-geo-location: India
vary: Accept-Encoding
content-encoding: gzip
transfer-encoding: chunked




Welcome to nginx!



Welcome to nginx!

If you see this page, the nginx web server is successfully installed and working. Further configuration is required.

For online documentation and support please refer to nginx.org.
Commercial support is available at nginx.com.

Thank you for using nginx.

Hier sehen Sie die Standard-HTML-Seite von Nginx, deren Antwortheader zeigt, dasscontent-encoding der empfangenen Antwortgzip komprimiert ist.

Sie haben Ambassador eine globale Konfiguration hinzugefügt, um die GZIP-Konfiguration für ausgewählte Inhaltstypantworten über das API-Gateway zu aktivieren.

Fazit

Sie haben mit Ambassador erfolgreich ein API-Gateway für Ihren Kubernetes-Cluster eingerichtet. Sie können Ihre Apps jetzt mithilfe von host- und pfadbasiertem Routing, benutzerdefinierten Headern und globaler GZIP-Komprimierung verfügbar machen.

Weitere Informationen zu den Ambassador-Anmerkungen und Konfigurationsparametern finden Sie unterAmbassador’s official documentation.