Wie man Gateway API im APISIX Ingress Controller verwendet
Yeqi Peng
November 11, 2022
Was ist die Kubernetes Gateway API?
Gateway API ist eine weitere community-initierte Spezifikation (verwaltet von sig-network), die Benutzern helfen soll, Dienste in Kubernetes außerhalb des Clusters verfügbar zu machen, zusätzlich zu den nativen Service- und Ingress-Ressourcen.
Die Gateway API unterstützt viele gängige Netzwerkprotokolle (z. B. HTTP, TCP, UDP) sowie TLS. Darüber hinaus umfasst die Gateway API Gateway-Ressourcen, die es ermöglichen, den Lebenszyklus eines Proxys oder Gateways über die Kubernetes-API zu verwalten.
Warum wird die Gateway API benötigt?
Im Vergleich zu Ingress stellt die Gateway API die funktionale Obermenge von Ingress dar und bietet folgende Verbesserungen:
- Rollenorientiert: Gateway besteht aus API-Ressourcen, die organisatorische Rollen modellieren, die Kubernetes-Service-Netzwerke nutzen und konfigurieren.
- Ausdrucksstark: Gateway-API-Ressourcen unterstützen Kernfunktionen wie header-basiertes Matching, Traffic-Gewichtung und andere Fähigkeiten, die in Ingress nur durch benutzerdefinierte Anmerkungen möglich waren.
- Erweiterbar: Die Gateway API ermöglicht die Verknüpfung benutzerdefinierter Ressourcen auf verschiedenen Ebenen der API, was eine granulare Anpassung an den geeigneten Stellen innerhalb der API-Struktur ermöglicht.
Darüber hinaus umfasst der Standard Funktionen wie Portabilität, gemeinsame Gateways und übergreifende Namespace-Referenzen.
Wie im Diagramm gezeigt, ermöglicht das rollenorientierte Design die gemeinsame Nutzung von Netzwerkinfrastruktur innerhalb eines Clusters zwischen verschiedenen Teams sowie die gemeinsame Nutzung von Richtlinien und Einschränkungen, die vom Cluster-Administrator festgelegt wurden. Dies ermöglicht es verschiedenen Rollentypen, wie Infrastrukturanbietern, Cluster-Administratoren und Anwendungsentwicklern, sich auf ihre eigene Arbeit zu konzentrieren und nicht auf die Verantwortlichkeiten anderer Rollen.
Verschiedene Rollen konfigurieren unterschiedliche Ebenen der Gateway-API-Ressourcen, und die verschiedenen Ebenen arbeiten zusammen:
Aktueller Status der Gateway API
Derzeit, mit der Veröffentlichung von Gateway API v0.5.0, kommen einige wichtige Kern-APIs erstmals in die Beta-Phase, darunter GatewayClass, Gateway und HTTPRoute.
Wie man die Gateway API in APISIX Ingress verwendet
Die Unterstützung für die Gateway API im APISIX Ingress Controller befindet sich in der Entwicklung und ist derzeit in der Alpha-Phase. Derzeit werden Ressourcen wie HTTPRoute und TCPRoute unterstützt.
Installation der Gateway API CRD
Um die Gateway API zu verwenden, müssen Sie zunächst die CRD für die Gateway API installieren, entweder über eine Kopie im APISIX Ingress Controller-Repository oder über das offizielle Repository kubernetes-sigs/gateway-api. Hier wird eine Kopie der CRD aus dem APISIX Ingress Controller-Repository als Beispiel verwendet.
Führen Sie den folgenden Befehl aus, um die CRD für die Gateway API zu installieren.
git pull git@github.com:apache/apisix-ingress-controller.git
cd apisix-ingress-controller
kubectl apply -f ./samples/deploy/gateway-api/
Installation des APISIX Ingress Controllers
Die Unterstützung für die Gateway API ist im APISIX Ingress Controller standardmäßig nicht aktiviert und kann mit dem Parameter -enable-gateway-api=true
aktiviert werden.
Bei der Installation mit Helm können Sie dies durch die Konfiguration von Werten aktivieren.
Verwenden Sie den folgenden Befehl, um APISIX und den APISIX Ingress Controller zu installieren.
helm repo add apisix https://charts.apiseven.com
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo update
kubectl create ns apisix-ingress
helm install apisix apisix/apisix --namespace apisix-ingress \
--set gateway.type=NodePort \
--set ingress-controller.enabled=true \
--set ingress-controller.config.apisix.serviceNamespace=apisix-ingress \
--set ingress-controller.config.kubernetes.enableGatewayAPI=true
Beachten Sie den Parameter -set ingress-controller.config.kubernetes.enableGatewayAPI=true
, der verwendet wird, um die Unterstützung für die Gateway API zu aktivieren.
Diese Befehle erstellen eine vollständige Testumgebung im Namespace apisix-ingress
, einschließlich APISIX, etcd und dem APISIX Ingress Controller.
Bereitstellung der Testlast
Verwenden Sie das Image kennethreitz/httpbin
als Testlast.
Verwenden Sie den folgenden Befehl, um diese Lasten im Standard-Namespace bereitzustellen.
kubectl run httpbin --image kennethreitz/httpbin --port 80
kubectl expose pod httpbin --port 80
Konfiguration von HTTPRoute
Derzeit unterstützt der APISIX Ingress Controller die v1alpha2
-Version der Gateway-API-Ressource.
Verwenden Sie für Tests die folgende HTTPRoute-Konfiguration und speichern Sie sie in der Datei httproute.yaml
:
# httproute.yaml
apiVersion: gateway.networking.k8s.io/v1alpha2
kind: HTTPRoute
metadata:
name: basic-http-route
spec:
hostnames:
- local.httpbin.org
rules:
- backendRefs:
- name: httpbin
port: 80
matches:
- path:
type: PathPrefix
value: /
Verwenden Sie den folgenden Befehl, um diese HTTPRoute-Konfiguration bereitzustellen:
kubectl apply -f ./httproute.yaml
Validierung
Die Validierung kann direkt im APISIX-Pod durchgeführt werden, indem Sie den folgenden Befehl ausführen:
kubectl -n apisix-ingress exec -it $(kubectl -n apisix-ingress get Pods -l "app.kubernetes.io/name=apisix" -o name) -c apisix -- curl -H "Host: local.httpbin.org" localhost:9080/ip
Die erwartete Ausgabe ist:
{
"origin": "127.0.0.1"
}
Dies zeigt an, dass unsere Konfiguration erfolgreich übernommen wurde.
Wie unterstützt APISIX Ingress die Gateway API?
Derzeit wird im APISIX Ingress Controller die Unterstützung für die Gateway API hinzugefügt, und es werden Ressourcen wie HTTPRoute, TCPRoute usw. unterstützt.
Die Unterstützung für Gateway und Gateway Class im APISIX Ingress Controller befindet sich in aktiver Entwicklung, sodass die Konfiguration dieser Ressourcen derzeit noch keine Wirkung zeigt.
Zusammenfassung
In diesem Artikel stellen wir die Gateway API vor, eine brandneue Spezifikation in der Community, um Dienste außerhalb eines Clusters verfügbar zu machen, und beschreiben, wie sie im APISIX Ingress Controller verwendet werden kann.
Die vollständige Unterstützung für die Gateway API im APISIX Ingress Controller befindet sich in aktiver Entwicklung.