Wie Amazon EKS und der APISIX Ingress Controller zusammenarbeiten, um komplexen Traffic zu verwalten
API7.ai
February 7, 2021
Hintergrund
Als Traffic-Manager ist es manchmal selbst dann schwer, das Unerwartete zu stoppen, wenn man darauf vorbereitet ist. Der Aufbau eines vierfachen API-Gateways ist entscheidend! Hier erfahren Sie, wie Amazon EKS + Ingress APISIX! dabei heute helfen kann.
Einführung
Kubernetes ist ein Open-Source-System zur Automatisierung der Bereitstellung, Skalierung und Verwaltung von containerisierten Anwendungen. Amazon Elastic Kubernetes Service (Amazon EKS) als verwalteter Kubernetes-Dienst ermöglicht es Ihnen, Kubernetes-Lasten auf Amazon Cloud Technologies einfach auszuführen, ohne die Kontrollebene oder Knoten installieren und warten zu müssen.
Apache APISIX ist ein dynamisches, Echtzeit-, Hochleistungs-API-Gateway. Es bietet umfangreiche Traffic-Management-Funktionen wie Lastausgleich, dynamisches Upstream, Graustufen-Bereitstellung, Traffic-Segmentierung, Authentifizierung und Beobachtbarkeit. Sie können Apache APISIX verwenden, um den Nord-Süd-Verkehr zwischen traditionellen Clients und Servern sowie den Ost-West-Verkehr zwischen Diensten zu verwalten.
Ingress APISIX kann als Einstiegspunkt-Controller für Kubernetes verwendet werden, wodurch die besten Funktionen von Apache APISIX in Kubernetes eingeführt werden. Dies kann durch gut gestaltete Controller-Komponenten gesteuert werden, um Ihnen zu helfen, komplexe Traffic-Management-Anforderungen zu erfüllen.
Wie man Ingress APISIX auf Amazon Elastic Kubernetes Service konfiguriert und ausführt
Voraussetzungen
Bevor Sie bereit sind, zu starten, konfigurieren Sie bitte einen verfügbaren Amazon EKS-Cluster auf Amazon CloudTech.
Sie sollten das kubectl-Tool in Ihrer eigenen Umgebung haben und den Kontext auf Ihren eigenen Amazon EKS-Cluster setzen, indem Sie den folgenden Befehl ausführen:
aws eks update-kubeconfig --name --region
Sobald der Kubernetes-Cluster bereit ist, erstellen Sie einen Namespace namens ingress-apisix, in dem alle Ressourcen, die verwendet werden, erstellt werden.
kubectl create namespace ingress-apisix
Wir werden Helm verwenden, um alle Komponenten von Ingress APISIX (Apache APISIX und apisix-ingress-controller) bereitzustellen. Bitte folgen Sie daher auch der Installationsanleitung, um Helm zu installieren. Das Helm-Chart für Apache APISIX und apisix-ingress-controller befindet sich unter apache/apisix-helm-chart und apache/apisix-ingress-controller. Bitte klonen Sie diese Pfade, um die entsprechenden Charts zu erhalten.
Installation von Apache APISIX
Apache APISIX fungiert als Proxy-Ebene für den apisix-ingress-controller und sollte im Voraus bereitgestellt werden.
cd /path/to/apisix-helm-chart
helm repo add bitnami https://charts.bitnami.com/bitnami
helm dependency update . /chart/apisix
helm install apisix . /chart/apisix \
--set gateway.type=LoadBalancer \
--set allow.ipList="{0.0.0.0/0}" \
--namespace ingress-apisix
kubectl get service --namespace ingress-apisix
Der obige Befehl erstellt zwei Kubernetes-Service-Ressourcen: apisix-gateway, das den tatsächlichen Verkehr verarbeitet, und apisix-admin, das als Kontrollebene fungiert und alle Konfigurationsänderungen verarbeitet. Hier erstellen wir apisix-gateway als LoadBalancer-Typ-Service, der mit Hilfe des Amazon Network Load Balancer dem Internet zugänglich gemacht werden kann. Wir können den Hostnamen des Load Balancers mit dem folgenden Befehl finden:
kubectl get service apisix-gateway \
--namespace ingress-apisix \
-o jsonpath='{.status.loadBalancer.ingress[].hostname}'
Beachten Sie auch: Das Feld allow.ipList sollte an die EKS-CIDR-Bereiche in unserem eigenen Amazon EKS-Cluster angepasst werden, damit apisix-ingress-controller von Apache APISIX lizenziert werden kann (für das Pushen von Ressourcen).
Weitere Informationen zu allen Konfigurationspunkten finden Sie in value.yaml, falls es andere Anforderungen gibt.
Installation von apisix-ingress-controller
Nach erfolgreicher Bereitstellung von Apache APISIX ist es an der Zeit, die Controller-Komponente zu installieren.
cd /path/to/apisix-ingress-controller
# installiere Basisressourcen, z.B. ServiceAccount.
helm install ingress-apisix-base -n ingress-apisix . /charts/base
# installiere apisix-ingress-controller
helm install ingress-apisix . /charts/ingress-apisix \
--set ingressController.image.tag=dev \
--set ingressController.config.apisix.baseURL=http://apisix-admin:9180/apisix/admin \
--set ingressController.config.apisix.adminKey={YOUR ADMIN KEY} \
--namespace ingress-apisix
Das ingress-apisix-base-Chart installiert einige grundlegende Abhängigkeiten für den apisix-ingress-controller, wie z.B. ServiceAccount und dessen spezifische CRD.
Das ingress-apisix-Chart führt uns durch die Installation des Controllers selbst. Wir können das Image-Tag auf die gewünschte Version ändern und den Wert von ingressController.config.apisix.adminKey im obigen Befehl anpassen. Diese Konfigurationen können je nach tatsächlichem Szenario angepasst werden (und stellen Sie sicher, dass der hier verwendete Admin-Schlüssel derselbe ist wie der in der Apache APISIX-Bereitstellung verwendete Schlüssel). Wenn Sie andere Anforderungen haben, können Sie sich in value.yaml über alle Konfigurationspunkte informieren.
Versuchen Sie dann, die Amazon EKS-Konsole zu öffnen, wählen Sie Ihren Cluster aus und klicken Sie auf den Reiter Workloads. Sie werden sehen, dass alle Pods, etcd und apisix-ingress-controller für Apache APISIX bereit sind.
Test starten
An diesem Punkt haben wir alle Komponenten von Ingress APISIX bereitgestellt. Stellen Sie also sicher, dass alles ordnungsgemäß funktioniert. Wir werden dann einen httpbin-Dienst bereitstellen und Apache APISIX anweisen, alle Anfragen an den Host "local.httpbin.org" an diesen Dienst weiterzuleiten.
Dazu müssen wir zunächst die httpbin-Workload erstellen und sie verfügbar machen.
kubectl run httpbin --image kennethreitz/httpbin --port 80
kubectl expose pod httpbin --port 80
Damit Apache APISIX Anfragen korrekt weiterleiten kann, müssen wir eine ApisixRoute-Ressource erstellen, um den Prozess zu steuern.
# ar-httpbin.yaml
apiVersion: apisix.apache.org/v1
kind: ApisixRoute
metadata:
name: httpserver-route
spec:
rules:
- host: local.httpbin.org
http:
paths:
- backend:
serviceName: httpbin
servicePort: 80
path: /*
Die obige ApisixRoute-Ressource ermöglicht es Apache APISIX, Anfragen mit dem Host-Header "local.httpbin.org" an das httpbin-Backend weiterzuleiten (das wir gerade erstellt haben).
Diese Einstellung wird dann angewendet, aber beachten Sie, dass der Dienst und die ApisixRoute-Ressource im selben Namespace platziert werden sollten, und der apisix-ingress-controller darf keine Namespaces überschreiten.
kubectl apply -f ar-httpbin.yaml
Testen Sie die Ergebnisse mit einem einfachen curl-Aufruf von überall, wo der Apache APISIX-Dienst erreichbar ist.
$ curl http://{apisix-gateway-ip}:{apisix-gateway-port}/headers -s -H 'Host: local.httpbin.org'
{
"headers": {
"Accept": "*/*",
"Host": "httpbin.org",
"User-Agent": "curl/7.64.1",
"X-Amzn-Trace-Id": "Root=1-5ffc3273-2928e0844e19c9810d1bbd8a"
}
}
Wenn der Service-Typ ClusterIP ist, müssen Sie sich in einen Pod im Amazon EKS-Cluster einloggen und anschließend den ClusterIP oder Service-FQDN verwenden, um auf Apache APISIX zuzugreifen. Wenn er bereits freigegeben ist (entweder als NodePort oder LoadBalancer), kann der erreichbare externe Endpunkt direkt angesprochen werden.
Hinweis: Dieser Artikel wurde von der AWS-WeChat-Website übernommen.