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 durchgehend
svc1.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 Befehlkubectl
installiert 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-address
in 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 vonsvc1
mit 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 vonsvc2
mit 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-Werthost
alssvc2.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 vonhttpd
aus 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 vonsvc3
und 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-Dienstsvc3
zuzuordnen. 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 Dienstsvc1
geä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.