Utilizzo di Envoy Gateway per implementare l'API del gateway Kubernetes
Scopri come impostare il gateway Envoy per supportare l'API del gateway Kubernetes nei cluster creati utilizzando Kubernetes Engine (OKE).
L'API gateway Kubernetes (API gateway) è lo standard di nuova generazione per la gestione del traffico in entrata e di rete nei cluster Kubernetes, dopo l'API in entrata. Per ulteriori informazioni sull'API gateway, vedere l'API gateway nella documentazione di Kubernetes e la documentazione dell'API gateway.
Envoy Gateway è un'implementazione open source dell'API del gateway che gestisce il proxy Envoy come piano dati. Fornisce un modo standard e conforme per gestire il traffico in entrata senza fare affidamento su CRD specifici del fornitore.
Distribuendo Envoy Gateway, puoi utilizzarlo come controller di base per gestire Gateway, HTTPRoute e altre risorse API del gateway.
La distribuzione di Envoy Gateway include diversi componenti che funzionano insieme:
- I CRD API gateway estendono l'API Kubernetes con nuovi tipi di risorse come
GatewayeHTTPRoute, consentendo la gestione dichiarativa del traffico in entrata. - Il controller del gateway Envoy funge da piano di controllo, controllando le risorse API del gateway e convertendole in configurazione dettagliata per il piano dati.
- I pod proxy Envoy formano il piano dati, gestendo il traffico di rete in conformità ai criteri e agli instradamenti definiti dalle risorse del gateway.
- L'integrazione del load balancer di rete OCI garantisce che il traffico esterno venga instradato correttamente alle applicazioni tramite i nodi proxy Envoy.
Requisiti indispensabili
Prima di impostare il gateway Envoy per supportare l'API del gateway Kubernetes, effettuare le operazioni riportate di seguito.
- È necessario disporre dell'accesso
kubectlal cluster creato da Kubernetes Engine. - Per il computer dal quale si accede al cluster deve essere installata l'interfaccia CLI Helm (v3.0 o versioni successive).
- Per installare le definizioni delle risorse personalizzate (CRD) e i controller, è necessario disporre dei privilegi cluster-admin.
Impostazione del gateway Envoy come controller API gateway
Passi di alto livello per impostare il gateway Envoy
Ad alto livello, i passi per impostare Envoy Gateway per fungere da controller API gateway sono i seguenti:
- Passo 1: Installa CRD API Gateway
- Passo 2: installare Envoy Gateway
- Passo 3: configurare l'integrazione del load balancer di rete OCI
- Passo 4: creare un GatewayClass
- Passo 5: creazione di un gateway
- Passo 6: distribuire un'applicazione campione
- Passo 7: Creare un HTTPRoute
- Passo 8: verificare la connettività
Passo 1: Installa CRD API Gateway
Le definizioni delle risorse personalizzate (CRD, Custom Resource Definitions) dell'API gateway non vengono installate per impostazione predefinita nei cluster creati mediante Kubernetes Engine. Prima di utilizzare Envoy Gateway come controller API Gateway, è necessario installare i CRD.
-
Installare le CRD di canale standard (v1.2.0) immettendo:
kubectl apply -f https://github.com/kubernetes-sigs/gateway-api/releases/download/v1.2.0/standard-install.yaml -
Verificare che la CRD sia installata immettendo:
kubectl get crd gateways.gateway.networking.k8s.io - Confermare che il CRD è elencato nell'output.
Passo 2: installare Envoy Gateway
Utilizzare Helm per installare il controller Envoy Gateway.
-
Installare il grafico nello spazio di nomi
envoy-gateway-systemimmettendo:helm install eg oci://docker.io/envoyproxy/gateway-helm --version v1.6.3 -n envoy-gateway-system --create-namespace -
Attendere che il controller del gateway Envoy sia pronto immettendo:
kubectl wait --namespace envoy-gateway-system \ --for=condition=ready pod \ --selector=control-plane=envoy-gateway \ --timeout=90s
Passo 3: configurare l'integrazione del load balancer di rete OCI
Creare una risorsa personalizzata EnvoyProxy per inserire le annotazioni OCI necessarie nel file Service creato da Envoy Gateway.
-
Creare un file denominato
oci-envoy-proxy.yamlcon il seguente contenuto: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" -
Creare la risorsa personalizzata
EnvoyProxyimmettendo:kubectl apply -f oci-envoy-proxy.yaml
Passo 4: Creare un GatewayClass
Creare un file GatewayClass che indichi al controller di utilizzare il file EnvoyProxy creato.
-
Creare un file denominato
oci-gateway-class.yamlcon il seguente contenuto: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 -
Creare
GatewayClassimmettendo:kubectl apply -f oci-gateway-class.yaml
Passo 5: creazione di un gateway
Creare la risorsa Gateway, che attiva la creazione del load balancer di rete OCI.
-
Creare un file denominato
my-gateway.yamlcon il seguente contenuto: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 -
Creare il file
Gatewayimmettendo:kubectl apply -f my-gateway.yaml -
Ottenere l'indirizzo IP esterno immettendo:
kubectl get gateway my-envoy-gateway -n defaultIl provisioning del load balancer da parte di OCI potrebbe richiedere alcuni minuti.
Attendere che la colonna
PROGRAMMEDcontengaTruee che nella colonnaADDRESSvenga visualizzato un indirizzo IP.
Passo 6: distribuire un'applicazione campione
Eseguire il test del gateway distribuendo un semplice servizio di eco.
-
Creare un file denominato
echo-app.yamlcon il seguente contenuto: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 -
Creare l'applicazione di esempio immettendo:
kubectl apply -f echo-app.yaml
Passo 7: creare un HTTPRoute
Creare un valore HTTPRoute per indirizzare il traffico da Gateway all'applicazione.
-
Creare un file denominato
echo-route.yamlcon il seguente contenuto: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 -
Creare
HTTPRouteimmettendo:kubectl apply -f echo-route.yaml
Passo 8: verificare la connettività
Verificare la connettività inviando una richiesta all'indirizzo IP esterno di Gateway.
-
Recupera l'indirizzo IP pubblico del gateway e lo salva come variabile di ambiente immettendo:
export GATEWAY_IP=$(kubectl get gateway my-envoy-gateway -o jsonpath='{.status.addresses[0].value}') -
Utilizzare
curlper inviare una richiesta all'indirizzo IP esterno del gateway immettendo:curl -i http://$GATEWAY_IP/ - Confermare di ricevere una risposta
200 OK, insieme a un corpo JSON che mostra i dettagli della richiesta (intestazioni, host e così via).
(Facoltativo) Cleanup
Facoltativamente, è possibile rimuovere le risorse create in questo argomento immettendo:
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
Se non è più necessaria l'API del gateway in questo cluster, è possibile rimuovere i CRD immettendo:
kubectl delete -f https://github.com/kubernetes-sigs/gateway-api/releases/download/v1.2.0/standard-install.yaml