Trabajar con Istio como complemento de cluster para implantar la API de gateway de Kubernetes

Descubra cómo instalar, configurar y utilizar el complemento de cluster de Istio para implantar la API de gateway de Kubernetes en los clusters que ha creado 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.

El complemento de cluster de Istio es una extensión gestionada por Oracle para el motor de Kubernetes que despliega y gestiona el plano de control de Istio en un cluster. Permite el soporte avanzado de la API de gateway y malla de servicios para la gestión del tráfico y la entrada.

Al activar el complemento de cluster de Istio, puede utilizar Istio como controlador subyacente para gestionar Gateway, HTTPRoute y otros recursos de API de Gateway.

El uso de Istio como complemento de cluster (el complemento de cluster de Istio) simplifica la gestión del ciclo de vida del plano de control (istiod). Puedes simplemente:

  • Active o desactive el plano de control de Istio.
  • Seleccione o descarte actualizaciones automáticas de la versión de Oracle.
  • Gestionar personalizaciones específicas de complementos con argumentos de configuración de par clave/valor aprobados.

En estas secciones, se describe cómo trabajar con el complemento de cluster de Istio para configurar las redes de API de Gateway:

Requisitos

Antes de configurar el complemento de cluster de Istio para soportar la API de gateway de Kubernetes:

  • Debe tener acceso kubectl al cluster creado por Kubernetes Engine.
  • Debe tener privilegios de administrador de cluster para instalar definiciones de recursos (CRD) y controladores personalizados.

Configuración del complemento de cluster de Istio como controlador de API de gateway

Pasos de alto nivel para configurar el complemento de cluster de Istio como controlador de API de gateway

En un nivel superior, los pasos para configurar el complemento de cluster de Istio para que funcione como controlador de API de gateway son los siguientes:

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 Istio como controlador de API de gateway, debe instalar las CRD.

  1. Instale las CRD de API de Gateway estándar (v1.2.0) introduciendo:

    kubectl apply -f https://github.com/kubernetes-sigs/gateway-api/releases/download/v1.2.0/standard-install.yaml
    
  2. Verifique que la CRD esté instalada escribiendo:

    kubectl get crd gateways.gateway.networking.k8s.io
    
  3. Confirme que la CRD se muestre en la salida.
  4. Confirme que la versión de la API de gateway de Kubernetes sea compatible con la versión del complemento Istio soportada por Kubernetes Engine para la versión de Kubernetes que se ejecuta en el cluster (consulte Comparaciones - v1.2 en la documentación de la API de gateway y Versiones soportadas del complemento de cluster).

Paso 2: Crear el archivo de configuración del complemento de cluster de Istio

Cree un archivo de configuración de complemento de cluster de Istio para utilizarlo con la CLI de OCI.

  1. Cree un archivo JSON (por ejemplo, enableistio.json).

  2. Agregue el siguiente contenido para activar el complemento.

    Nota: A diferencia del caso de uso estándar de Service Mesh, no es necesario definir estrictamente el enableIngressGateway heredado porque la API de gateway puede aprovisionar dinámicamente la infraestructura de gateway. Sin embargo, su configuración proporciona una reserva predeterminada.

    {
        "addonName": "Istio",
        "configurations": [
            {
                "key": "enableIngressGateway",
                "value": "false"
            }
        ]
    }
    

    Tenga en cuenta los siguientes puntos:

    • Si define value en "true", el complemento de cluster de Istio aprovisiona el despliegue y el servicio clásicos de istio-ingressgateway junto con el plano de control.
    • Si define value en "false", solo se instala el plano de control (istiod). A continuación, puede crear recursos Gateway que Istio aprovisionará automáticamente según sea necesario.
  3. Guarde y cierre el archivo.

Paso 3: Desplegar el complemento de cluster de Istio en el cluster y confirmar que el despliegue se ha realizado correctamente

Despliegue el complemento de cluster de Istio.

  1. Despliegue el complemento mediante la CLI de OCI introduciendo:

    oci ce cluster install-addon --addon-name Istio --cluster-id <cluster-ocid> --from-json file://enableistio.json
    
  2. Verifique el despliegue correcto:

    1. Introduzca:

      oci ce cluster list-addons --cluster-id <cluster-ocid>
      
    2. Confirme que el estado del ciclo de vida del complemento de cluster de Istio es ACTIVE.

  3. Verifique que el plano de control de Istio se está ejecutando:

    1. Introduzca:

      kubectl get pods -n istio-system
      
    2. Confirme que el pod istiod tiene el estado Running.

Paso 4: Crear una puerta de enlace

Cree el recurso Gateway.

  1. Cree un nuevo espacio de nombres (por ejemplo, test-gateway) introduciendo:
    kubectl create namespace test-gateway
  2. Cree un archivo denominado gateway.yaml con el siguiente contenido.

    apiVersion: gateway.networking.k8s.io/v1
    kind: Gateway
    metadata:
      name: my-gateway
      namespace: test-gateway
      annotations:
        # OCI specific annotation for Network Load Balancer (Layer 4)
        oci.oraclecloud.com/load-balancer-type: "nlb"
    spec:
      gatewayClassName: istio
      listeners:
      - name: http
        port: 80
        protocol: HTTP
        allowedRoutes:
          namespaces:
            from: Same
    

    Observe la línea gatewayClassName: istio, que indica al complemento de cluster de Istio que gestione este gateway.

  3. Cree Gateway introduciendo:

    kubectl apply -f gateway.yaml
    
  4. Para obtener la dirección IP externa, introduzca:

    kubectl get gateway -n test-gateway
    

    OCI puede tardar unos minutos en aprovisionar el equilibrador de carga.

    Espere hasta que la columna PROGRAMMED contenga True y aparezca una dirección IP en la columna ADDRESS.

Paso 5: Desplegar una aplicación de muestra

Despliegue una aplicación de ejemplo en el nuevo espacio de nombres.

  1. Despliegue una aplicación de ejemplo (por ejemplo, httpbin) introduciendo:

    
    kubectl apply -f https://raw.githubusercontent.com/istio/istio/master/samples/httpbin/httpbin.yaml -n test-gateway
    

Paso 6: Crear un HTTPRoute

Cree un HTTPRoute para dirigir el tráfico de Gateway al servicio httpbin.

  1. Cree un archivo denominado route.yaml con el siguiente contenido:

    apiVersion: gateway.networking.k8s.io/v1
    kind: HTTPRoute
    metadata:
      name: httpbin-route
      namespace: test-gateway
    spec:
      parentRefs:
      - name: my-gateway
      rules:
      - matches:
        - path:
            type: PathPrefix
            value: /get
        backendRefs:
        - name: httpbin
          port: 8000
    
  2. Cree HTTPRoute introduciendo:

    kubectl apply -f route.yaml
    

Paso 7: Verificar la conectividad

Verifique la conectividad enviando una solicitud a la dirección IP externa de Gateway.

  1. 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-gateway -n test-gateway -o jsonpath='{.status.addresses[0].value}')
  2. Utilice curl para enviar una solicitud a la dirección IP externa del gateway introduciendo:

    curl -i http://$GATEWAY_IP/get
    
    
    
  3. Confirme que recibe una respuesta 200 OK de la aplicación httpbin.

Desactivación (y eliminación) del complemento de cluster de Istio

En estas instrucciones, se describe cómo desactivar y eliminar el complemento de cluster de Istio.

  1. Desactive y elimine el complemento mediante la CLI de OCI introduciendo:

    oci ce cluster disable-addon --addon-name Istio --cluster-id <cluster-ocid> --is-remove-existing-add-on true
    
  2. (Opcional) Elimine los recursos de API de Gateway.

    El proceso de eliminación de complementos no suprime automáticamente los recursos Gateway o HTTPRoute que ha creado. Elimínelos manualmente para limpiar los equilibradores de carga asociados introduciendo:

    kubectl delete -f gateway.yaml
    kubectl delete -f route.yaml
  3. (Opcional) Elimine las CRD de API de Gateway.

    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