Utilizzo di Istio come componente aggiuntivo del cluster per implementare l'API del gateway Kubernetes

Scopri come installare, configurare e utilizzare il componente aggiuntivo del cluster Istio per implementare 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.

Il componente aggiuntivo del cluster Istio è un'estensione gestita da Oracle per Kubernetes Engine che distribuisce e gestisce il piano di controllo Istio in un cluster. Abilita il supporto avanzato di mesh di servizio e API gateway per la gestione dell'ingresso e del traffico.

Abilitando il componente aggiuntivo del cluster Istio, puoi utilizzare Istio come controller di base per gestire Gateway, HTTPRoute e altre risorse API del gateway.

L'utilizzo di Istio come componente aggiuntivo del cluster (il componente aggiuntivo del cluster Istio) semplifica la gestione del ciclo di vita del piano di controllo (istiod). Puoi più semplicemente:

  • Abilitare o disabilitare il piano di controllo Istio.
  • Opt-in e/o gli aggiornamenti automatici delle versioni di Oracle.
  • Consente di gestire personalizzazioni specifiche dei componenti aggiuntivi utilizzando argomenti di configurazione approvati per coppie chiave-valore.

In queste sezioni viene descritto come utilizzare il componente aggiuntivo del cluster Istio per configurare la rete API gateway.

Requisiti indispensabili

Prima di configurare il componente aggiuntivo del cluster Istio per supportare l'API del gateway Kubernetes, effettuare le operazioni riportate di seguito.

  • È necessario disporre dell'accesso kubectl al cluster creato da Kubernetes Engine.
  • Per installare le definizioni delle risorse personalizzate (CRD) e i controller, è necessario disporre dei privilegi cluster-admin.

Impostazione del componente aggiuntivo cluster Istio come controller API gateway

Passi di alto livello per impostare il componente aggiuntivo del cluster Istio come controller API gateway

Ad alto livello, i passaggi per impostare l'add-on del cluster Istio per fungere da controller API gateway sono i seguenti:

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 Istio come controller API gateway, è necessario installare i CRD.

  1. Installare le CRD API gateway standard (v1.2.0) immettendo:

    kubectl apply -f https://github.com/kubernetes-sigs/gateway-api/releases/download/v1.2.0/standard-install.yaml
    
  2. Verificare che la CRD sia installata immettendo:

    kubectl get crd gateways.gateway.networking.k8s.io
    
  3. Confermare che il CRD è elencato nell'output.
  4. Verificare che la release API di Kubernetes Gateway sia compatibile con la versione del componente aggiuntivo Istio supportata da Kubernetes Engine per la versione di Kubernetes in esecuzione nel cluster (vedere Confronti - v1.2 nella documentazione relativa all'API Gateway e Versioni supportate del componente aggiuntivo cluster).

Passo 2: Creare il file di configurazione del componente aggiuntivo del cluster Istio

Creare un file di configurazione del componente aggiuntivo del cluster Istio da utilizzare con l'interfaccia CLI OCI.

  1. Creare un file JSON (ad esempio, enableistio.json).

  2. Per attivare il componente aggiuntivo aggiungere i seguenti contenuti.

    Nota: a differenza dello use case Service Mesh standard, non è strettamente necessario impostare il file enableIngressGateway legacy perché l'API del gateway può eseguire dinamicamente il provisioning dell'infrastruttura gateway. Tuttavia, l'impostazione fornisce un fallback predefinito.

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

    Notare i punti riportati di seguito:

    • Se si imposta value su "true", il componente aggiuntivo del cluster Istio esegue il provisioning della distribuzione e del servizio istio-ingressgateway classici accanto al piano di controllo.
    • Se si imposta value su "false", viene installato solo il piano di controllo (istiod). È quindi possibile creare risorse Gateway di cui Istio eseguirà automaticamente il provisioning in base alle esigenze.
  3. Salvare e chiudere il file.

Passo 3: Distribuire il componente aggiuntivo del cluster Istio sul cluster e confermare la distribuzione riuscita

Distribuire il componente aggiuntivo del cluster Istio.

  1. Distribuire il componente aggiuntivo utilizzando l'interfaccia CLI OCI immettendo:

    oci ce cluster install-addon --addon-name Istio --cluster-id <cluster-ocid> --from-json file://enableistio.json
    
  2. Verifica distribuzione riuscita:

    1. Inserisci:

      oci ce cluster list-addons --cluster-id <cluster-ocid>
      
    2. Verificare che lo stato del ciclo di vita del componente aggiuntivo del cluster Istio sia ACTIVE.

  3. Verificare che il piano di controllo Istio sia in esecuzione:

    1. Inserisci:

      kubectl get pods -n istio-system
      
    2. Verificare che il pod istiod si trovi nello stato Running.

Passo 4: Creazione di un gateway

Creare la risorsa Gateway.

  1. Creare un nuovo spazio di nomi (ad esempio, test-gateway) immettendo:
    kubectl create namespace test-gateway
  2. Creare un file denominato gateway.yaml con il contenuto seguente.

    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
    

    Si noti la riga gatewayClassName: istio, che indica all'add-on del cluster Istio di gestire questo gateway.

  3. Creare il file Gateway immettendo:

    kubectl apply -f gateway.yaml
    
  4. Ottenere l'indirizzo IP esterno immettendo:

    kubectl get gateway -n test-gateway
    

    Il provisioning del load balancer da parte di OCI potrebbe richiedere alcuni minuti.

    Attendere che la colonna PROGRAMMED contenga True e che nella colonna ADDRESS venga visualizzato un indirizzo IP.

Passo 5: distribuzione di un'applicazione campione

Distribuire un'applicazione di esempio nel nuovo spazio di nomi.

  1. Distribuire un'applicazione di esempio, ad esempio httpbin, immettendo:

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

Passo 6: creare un HTTPRoute

Creare un file HTTPRoute per indirizzare il traffico da Gateway al servizio httpbin.

  1. Creare un file denominato route.yaml con il seguente contenuto:

    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. Creare HTTPRoute immettendo:

    kubectl apply -f route.yaml
    

Passo 7: verificare la connettività

Verificare la connettività inviando una richiesta all'indirizzo IP esterno di Gateway.

  1. Recupera l'indirizzo IP pubblico del gateway e lo salva come variabile di ambiente immettendo:

    export GATEWAY_IP=$(kubectl get gateway my-gateway -n test-gateway -o jsonpath='{.status.addresses[0].value}')
  2. Utilizzare curl per inviare una richiesta all'indirizzo IP esterno del gateway immettendo:

    curl -i http://$GATEWAY_IP/get
    
    
    
  3. Confermare la ricezione di una risposta 200 OK dall'applicazione httpbin.

Disabilitazione (e rimozione) dell'add-on cluster Istio

Queste istruzioni descrivono come disabilitare e rimuovere il componente aggiuntivo del cluster Istio.

  1. Disabilitare e rimuovere il componente aggiuntivo utilizzando l'interfaccia CLI OCI immettendo quanto riportato di seguito.

    oci ce cluster disable-addon --addon-name Istio --cluster-id <cluster-ocid> --is-remove-existing-add-on true
    
  2. (Facoltativo) Rimuovere le risorse API gateway.

    Il processo di rimozione del componente aggiuntivo non elimina automaticamente le risorse Gateway o HTTPRoute create. Rimuoverli manualmente per eseguire il cleanup dei load balancer associati immettendo:

    kubectl delete -f gateway.yaml
    kubectl delete -f route.yaml
  3. (Facoltativo) Rimuovere i CRD API gateway.

    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