Mit Envoy Gateway arbeiten, um Kubernetes-Gateway-API zu implementieren
Erfahren Sie, wie Sie Envoy Gateway so einrichten, dass die Kubernetes-Gateway-API in Clustern unterstützt wird, die Sie mit Kubernetes Engine (OKE) erstellen.
Die Kubernetes-Gateway-API (Gateway-API) ist der Standard der nächsten Generation für die Verwaltung von Ingress- und Netzwerktraffic in Kubernetes-Clustern nach der Ingress-API. Weitere Informationen zur Gateway-API finden Sie unter Gateway-API in der Kubernetes-Dokumentation und in der Dokumentation zur Gateway-API.
Envoy Gateway ist eine Open-Source-Implementierung der Gateway-API, die den Envoy-Proxy als Data Plane verwaltet. Es bietet eine standardmäßige, konforme Möglichkeit, Ingress-Traffic zu verwalten, ohne sich auf herstellerspezifische CRDs zu verlassen.
Durch das Deployment von Envoy Gateway können Sie es als zugrunde liegenden Controller zur Verwaltung von Gateway-, HTTPRoute- und anderen Gateway-API-Ressourcen verwenden.
Das Envoy Gateway-Deployment umfasst mehrere Komponenten, die zusammenarbeiten:
- Gateway-API-CRDs erweitern die Kubernetes-API um neue Ressourcentypen wie
GatewayundHTTPRoute, sodass der Ingress-Traffic deklarativ verwaltet werden kann. - Der Envoy Gateway-Controller fungiert als Control Plane, überwacht Gateway-API-Ressourcen und übersetzt diese in eine detaillierte Konfiguration für die Data Plane.
- Envoy-Proxypods bilden die Data Plane und verarbeiten den Netzwerktraffic in Übereinstimmung mit den von Gatewayressourcen definierten Policys und Routen.
- Durch die Integration von OCI Network Load Balancer wird sichergestellt, dass externer Traffic ordnungsgemäß über Envoy-Proxyknoten an Anwendungen weitergeleitet wird.
Voraussetzungen
Bevor Sie Envoy Gateway zur Unterstützung der Kubernetes-Gateway-API einrichten:
- Sie benötigen
kubectl-Zugriff auf das von Kubernetes Engine erstellte Cluster. - Auf dem Rechner, von dem aus Sie auf das Cluster zugreifen, muss Helm-CLI (v3.0 oder höher) installiert sein.
- Sie benötigen cluster-admin-Berechtigungen, um benutzerdefinierte Ressourcendefinitionen (CRDs) und Controller zu installieren.
Envoy Gateway als Gateway-API-Controller einrichten
Allgemeine Schritte zum Einrichten von Envoy Gateway
Um Envoy Gateway als Gateway-API-Controller einzurichten, gehen Sie wie folgt vor:
- Schritt 1: Gateway-API-CRDs installieren
- Schritt 2: Envoy Gateway installieren
- Schritt 3: OCI Network Load Balancer-Integration konfigurieren
- Schritt 4: GatewayClass erstellen
- 5. Schritt: Gateway erstellen
- Schritt 6: Beispielanwendung bereitstellen
- Schritt 7: HTTPRoute erstellen
- Schritt 8: Konnektivität prüfen
Schritt 1: Gateway-API-CRDs installieren
Die benutzerdefinierten Ressourcendefinitionen (CRDs) der Gateway-API werden nicht standardmäßig in Clustern installiert, die Sie mit der Kubernetes Engine erstellen. Bevor Sie Envoy Gateway als Gateway-API-Controller verwenden, müssen Sie die CRDs installieren.
-
Installieren Sie die Standardkanal-CRDs (v1.2.0), indem Sie Folgendes eingeben:
kubectl apply -f https://github.com/kubernetes-sigs/gateway-api/releases/download/v1.2.0/standard-install.yaml -
Prüfen Sie, ob die CRD installiert ist, indem Sie Folgendes eingeben:
kubectl get crd gateways.gateway.networking.k8s.io - Vergewissern Sie sich, dass die CRD in der Ausgabe aufgeführt ist.
Schritt 2: Envoy Gateway installieren
Verwenden Sie Helm, um den Envoy Gateway Controller zu installieren.
-
Installieren Sie das Diagramm im Namespace
envoy-gateway-system, indem Sie Folgendes eingeben:helm install eg oci://docker.io/envoyproxy/gateway-helm --version v1.6.3 -n envoy-gateway-system --create-namespace -
Warten Sie, bis der Envoy Gateway Controller bereit ist, indem Sie Folgendes eingeben:
kubectl wait --namespace envoy-gateway-system \ --for=condition=ready pod \ --selector=control-plane=envoy-gateway \ --timeout=90s
Schritt 3: OCI Network Load Balancer-Integration konfigurieren
Erstellen Sie eine benutzerdefinierte EnvoyProxy-Ressource, um die erforderlichen OCI-Annotationen in die Service zu injizieren, die das Envoy-Gateway erstellt.
-
Erstellen Sie eine Datei namens
oci-envoy-proxy.yamlmit dem folgenden Inhalt:apiVersion: gateway.envoyproxy.io/v1alpha1 kind: EnvoyProxy metadata: name: oci-flexible-proxy namespace: envoy-gateway-system spec: provider: type: Kubernetes kubernetes: envoyService: annotations: oci.oraclecloud.com/load-balancer-type: "nlb" -
Erstellen Sie die benutzerdefinierte Ressource
EnvoyProxy, indem Sie Folgendes eingeben:kubectl apply -f oci-envoy-proxy.yaml
Schritt 4: GatewayClass erstellen
Erstellen Sie eine GatewayClass, die den Controller anweist, die von Ihnen erstellte EnvoyProxy zu verwenden.
-
Erstellen Sie eine Datei namens
oci-gateway-class.yamlmit dem folgenden Inhalt:apiVersion: gateway.networking.k8s.io/v1 kind: GatewayClass metadata: name: oci-gateway-class spec: controllerName: gateway.envoyproxy.io/gatewayclass-controller parametersRef: group: gateway.envoyproxy.io kind: EnvoyProxy name: oci-flexible-proxy namespace: envoy-gateway-system -
Erstellen Sie
GatewayClass, indem Sie Folgendes eingeben:kubectl apply -f oci-gateway-class.yaml
5. Schritt: Gateway erstellen
Erstellen Sie die Ressource Gateway, die das Erstellen des OCI Network Load Balancers auslöst.
-
Erstellen Sie eine Datei namens
my-gateway.yamlmit dem folgenden Inhalt:apiVersion: gateway.networking.k8s.io/v1 kind: Gateway metadata: name: my-envoy-gateway namespace: default spec: gatewayClassName: oci-gateway-class listeners: - name: http protocol: HTTP port: 80 allowedRoutes: namespaces: from: Same -
Erstellen Sie die
Gateway, indem Sie Folgendes eingeben:kubectl apply -f my-gateway.yaml -
Rufen Sie die externe IP-Adresse ab, indem Sie Folgendes eingeben:
kubectl get gateway my-envoy-gateway -n defaultEs kann einige Minuten dauern, bis OCI den Load Balancer bereitstellt.
Warten Sie, bis die Spalte
PROGRAMMEDTrueenthält und eine IP-Adresse in der SpalteADDRESSangezeigt wird.
Schritt 6: Beispielanwendung bereitstellen
Testen Sie das Gateway, indem Sie einen einfachen Echoservice bereitstellen.
-
Erstellen Sie eine Datei namens
echo-app.yamlmit dem folgenden Inhalt:apiVersion: apps/v1 kind: Deployment metadata: name: echo-app namespace: default spec: replicas: 1 selector: matchLabels: app: echo template: metadata: labels: app: echo spec: containers: - name: echo image: ealen/echo-server:latest ports: - containerPort: 80 --- apiVersion: v1 kind: Service metadata: name: echo-service namespace: default spec: selector: app: echo ports: - port: 80 targetPort: 80 -
Erstellen Sie die Beispielanwendung, indem Sie Folgendes eingeben:
kubectl apply -f echo-app.yaml
Schritt 7: HTTPRoute erstellen
Erstellen Sie eine HTTPRoute, um Traffic von der Gateway zur Anwendung zu leiten.
-
Erstellen Sie eine Datei namens
echo-route.yamlmit dem folgenden Inhalt:apiVersion: gateway.networking.k8s.io/v1 kind: HTTPRoute metadata: name: echo-route namespace: default spec: parentRefs: - name: my-envoy-gateway rules: - matches: - path: type: PathPrefix value: / backendRefs: - name: echo-service port: 80 -
Erstellen Sie
HTTPRoute, indem Sie Folgendes eingeben:kubectl apply -f echo-route.yaml
Schritt 8: Konnektivität prüfen
Prüfen Sie die Konnektivität, indem Sie eine Anforderung an die externe IP-Adresse der Gateway senden.
-
Rufen Sie die öffentliche IP-Adresse des Gateways ab, und speichern Sie sie als Umgebungsvariable, indem Sie Folgendes eingeben:
export GATEWAY_IP=$(kubectl get gateway my-envoy-gateway -o jsonpath='{.status.addresses[0].value}') -
Verwenden Sie
curl, um eine Anforderung an die externe IP-Adresse des Gateways zu senden, indem Sie Folgendes eingeben:curl -i http://$GATEWAY_IP/ - Bestätigen Sie, dass Sie eine
200 OK-Antwort sowie einen JSON-Body erhalten, der Details zur Anforderung (Header, Host usw.) anzeigt.
(Optional) Bereinigen
Sie können optional die Ressourcen entfernen, die Sie in diesem Thema erstellt haben, indem Sie Folgendes eingeben:
kubectl delete -f echo-route.yaml
kubectl delete -f echo-app.yaml
kubectl delete -f my-gateway.yaml
kubectl delete -f oci-gateway-class.yaml
kubectl delete -f oci-envoy-proxy.yaml
helm uninstall eg -n envoy-gateway-system
Wenn Sie die Gateway-API in diesem Cluster nicht mehr benötigen, können Sie die CRDs entfernen, indem Sie Folgendes eingeben:
kubectl delete -f https://github.com/kubernetes-sigs/gateway-api/releases/download/v1.2.0/standard-install.yaml