Trabajar con el gateway de Envoy para implantar la API de gateway de Kubernetes
Descubra cómo configurar el gateway de Envoy para soportar la API de gateway de Kubernetes en los clusters que cree mediante Kubernetes Engine (OKE).
La API de gateway de Kubernetes (API de gateway) es el estándar de última generación para gestionar el tráfico de entrada y de red en los clusters de Kubernetes, lo que sucede con la API de entrada. Para obtener más información sobre la API de gateway, consulte la API de gateway en la documentación de Kubernetes y la documentación de API de gateway.
Envoy Gateway es una implementación de código abierto de la API de Gateway que gestiona el proxy de Envoy como el plano de datos. Proporciona una forma estándar y compatible de gestionar el tráfico de entrada sin depender de CRD específicos del proveedor.
Al desplegar el gateway de Envoy, puede utilizarlo como controlador subyacente para gestionar Gateway, HTTPRoute y otros recursos de API de gateway.
El despliegue del gateway de Envoy incluye varios componentes que funcionan conjuntamente:
- Las CRD de API de gateway amplían la API de Kubernetes con nuevos tipos de recursos, como
GatewayyHTTPRoute, lo que permite la gestión declarativa del tráfico de entrada. - El controlador de gateway de Envoy actúa como plano de control, vigilando los recursos de API de gateway y traduciéndolos en una configuración detallada para el plano de datos.
- Los pods de proxy de Envoy forman el plano de datos y gestionan el tráfico de red de acuerdo con las políticas y las rutas definidas por los recursos de gateway.
- La integración del equilibrador de carga de red de OCI garantiza que el tráfico externo se enrute correctamente a las aplicaciones mediante nodos de proxy de Envoy.
Requisitos
Antes de configurar el gateway de Envoy para soportar la API de gateway de Kubernetes:
- Debe tener acceso
kubectlal cluster creado por Kubernetes Engine. - La máquina desde la que accede al cluster debe tener instalada la CLI de Helm (v3.0 o posterior).
- Debe tener privilegios de administrador de cluster para instalar definiciones de recursos (CRD) y controladores personalizados.
Configuración de Envoy Gateway como controlador de API de Gateway
Pasos de alto nivel para configurar el gateway de Envoy
En un nivel superior, los pasos para configurar el gateway de Envoy para que funcione como controlador de API de gateway son los siguientes:
- Paso 1: Instalación de CRD de API de Gateway
- Paso 2: Instalación del gateway de Envoy
- Paso 3: Configurar la integración del equilibrador de carga de red de OCI
- Paso 4: Crear un GatewayClass
- Paso 5: Crear una puerta de enlace
- Paso 6: Desplegar una aplicación de muestra
- Paso 7: Crear un HTTPRoute
- Paso 8: Verificar la conectividad
Paso 1: Instalación de CRD de API de Gateway
Las definiciones de recursos personalizados (CRD) de API de gateway no están instaladas por defecto en los clusters que cree mediante Kubernetes Engine. Antes de utilizar Envoy Gateway como controlador de API de Gateway, debe instalar las CRD.
-
Instale las CRD de canal estándar (v1.2.0) introduciendo:
kubectl apply -f https://github.com/kubernetes-sigs/gateway-api/releases/download/v1.2.0/standard-install.yaml -
Verifique que la CRD esté instalada escribiendo:
kubectl get crd gateways.gateway.networking.k8s.io - Confirme que la CRD se muestre en la salida.
Paso 2: Instalación del gateway de Envoy
Utilice Helm para instalar el controlador de puerta de enlace de Envoy.
-
Instale el gráfico en el espacio de nombres
envoy-gateway-systemintroduciendo:helm install eg oci://docker.io/envoyproxy/gateway-helm --version v1.6.3 -n envoy-gateway-system --create-namespace -
Espere a que el controlador de gateway de Envoy esté listo introduciendo:
kubectl wait --namespace envoy-gateway-system \ --for=condition=ready pod \ --selector=control-plane=envoy-gateway \ --timeout=90s
Paso 3: Configurar la integración del equilibrador de carga de red de OCI
Cree un recurso personalizado EnvoyProxy para inyectar las anotaciones de OCI necesarias en Service que crea el gateway de Envoy.
-
Cree un archivo denominado
oci-envoy-proxy.yamlcon el siguiente contenido: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" -
Cree el recurso personalizado
EnvoyProxyintroduciendo:kubectl apply -f oci-envoy-proxy.yaml
Paso 4: Crear un GatewayClass
Cree un GatewayClass que indique al controlador que utilice el EnvoyProxy que ha creado.
-
Cree un archivo denominado
oci-gateway-class.yamlcon el siguiente contenido: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 -
Cree
GatewayClassintroduciendo:kubectl apply -f oci-gateway-class.yaml
Paso 5: Crear una puerta de enlace
Cree el recurso Gateway, que dispara la creación del equilibrador de carga de red de OCI.
-
Cree un archivo denominado
my-gateway.yamlcon el siguiente contenido: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 -
Cree
Gatewayintroduciendo:kubectl apply -f my-gateway.yaml -
Para obtener la dirección IP externa, introduzca:
kubectl get gateway my-envoy-gateway -n defaultOCI puede tardar unos minutos en aprovisionar el equilibrador de carga.
Espere hasta que la columna
PROGRAMMEDcontengaTruey aparezca una dirección IP en la columnaADDRESS.
Paso 6: Desplegar una aplicación de muestra
Pruebe el gateway mediante el despliegue de un servicio de eco simple.
-
Cree un archivo denominado
echo-app.yamlcon el siguiente contenido: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 -
Cree la aplicación de ejemplo introduciendo:
kubectl apply -f echo-app.yaml
Paso 7: Crear un HTTPRoute
Cree un HTTPRoute para dirigir el tráfico de Gateway a la aplicación.
-
Cree un archivo denominado
echo-route.yamlcon el siguiente contenido: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 -
Cree
HTTPRouteintroduciendo:kubectl apply -f echo-route.yaml
Paso 8: Verificar la conectividad
Verifique la conectividad enviando una solicitud a la dirección IP externa de Gateway.
-
Recupere la dirección IP pública del gateway y guárdela como una variable de entorno introduciendo:
export GATEWAY_IP=$(kubectl get gateway my-envoy-gateway -o jsonpath='{.status.addresses[0].value}') -
Utilice
curlpara enviar una solicitud a la dirección IP externa del gateway introduciendo:curl -i http://$GATEWAY_IP/ - Confirme que recibe una respuesta
200 OK, junto con un cuerpo JSON que muestra detalles sobre la solicitud (cabeceras, host, etc.).
(Opcional) Limpieza
Si lo desea, puede eliminar los recursos que ha creado en este tema introduciendo:
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
Si ya no necesita la API de Gateway en este cluster, puede eliminar las CRD introduciendo:
kubectl delete -f https://github.com/kubernetes-sigs/gateway-api/releases/download/v1.2.0/standard-install.yaml