Aggiorna le norme di gestione delle API con l'operatore APIM di Apigee per Kubernetes

Questa pagina si applica ad Apigee, ma non ad Apigee hybrid.

Visualizza la documentazione di Apigee Edge.

Man mano che le tue esigenze di gestione delle API crescono e cambiano, potresti dover aggiungere nuovi servizi al cluster o aggiornare le route e le opzioni di ingresso esistenti. Questa pagina descrive come aggiornare il cluster per completare le seguenti attività:

Prima di iniziare

Prima di iniziare questa attività, assicurati di completare i passaggi descritti in Applica un criterio con l'operatore Apigee APIM per Kubernetes. Questa pagina presuppone che tu abbia configurato un cluster Google Kubernetes Engine (GKE), installato l'operatore Apigee APIM per Kubernetes, creato un gateway Google Kubernetes Engine (GKE) e applicato almeno un criterio di gestione API al gateway.

Ruoli obbligatori

Se hai assegnato i ruoli richiesti al account di servizio come descritto in Installare l'operatore Apigee APIM per Kubernetes, non sono necessari ruoli o autorizzazioni IAM aggiuntivi per completare queste attività.

Puoi scegliere di autorizzare le azioni sulle risorse nel cluster Google Kubernetes Engine utilizzando il meccanismo di controllo dell'accesso basato sui ruoli (RBAC) integrato in Kubernetes. Per maggiori informazioni, vedi Autorizzare le azioni nei cluster utilizzando il controllo degli accessi basato sui ruoli.

Aggiungere un nuovo gateway e una nuova HTTPRoute

In questa sezione aggiungerai un nuovo gateway e una nuova HTTPRoute al tuo cluster. Nelle guide alle attività precedenti, le configurazioni di esempio utilizzavano un gateway GKE esterno. Se vengono implementati più gateway nella stessa regione, devono essere dello stesso tipo (entrambi esterni o entrambi interni). Per questo motivo, la configurazione di esempio in questa guida utilizzerà anche un gateway esterno.

L'operatore APIM può essere utilizzato con gateway GKE interni o esterni, ma non puoi eseguire il deployment di entrambi i tipi di gateway nella stessa regione.

Per aggiungere un nuovo gateway e una nuova HTTPRoute al tuo cluster, completa i seguenti passaggi:

  1. Configura un nuovo gateway GKE esterno. Per ulteriori informazioni e passaggi, consulta Eseguire il deployment di un gateway esterno.
  2. Crea una risorsa globale SslCertificate gestita da Google:
    gcloud compute ssl-certificates create CERT_NAME \
      --domains=HOST_NAME \
      --global

    Dove:

    • CERT_NAME è il nome del certificato che vuoi creare.
    • HOST_NAME_2 è il nome host del nuovo gateway.

  3. Crea un nuovo file denominato gateway2.yaml nello spazio dei nomi apim.
  4. Copia i seguenti contenuti nel nuovo file:
    # gateway2.yaml
    apiVersion: gateway.networking.k8s.io/v1beta1
    kind: Gateway
    metadata:
      name: global-ext-lb2
      spec:
      gatewayClassName: gke-l7-global-external-managed
      listeners:
      - name: https
        protocol: HTTPS
        allowedRoutes:
          kinds:
          - kind: HTTPRoute
          namespaces:
            from: All
        port: 443
        tls:
          options:
            networking.gke.io/pre-shared-certs: CERT_NAME
  5. Aggiungi una nuova HTTPRoute per /post allo stesso file, come evidenziato di seguito:
    # http-route2.yaml
      apiVersion: gateway.networking.k8s.io/v1beta1
      kind: HTTPRoute
      metadata:
        name: http-bin-route-post
        namespace: http
      spec:
        parentRefs:
          - kind: Gateway
            name: global-ext-lb2
            namespace: default
        hostnames:
          - HOST_NAME_2
        rules:
        - matches:
          - path:
              type: PathPrefix
              value: "/post"
          backendRefs:
          - name: httpbin
            kind: Service
            port: 80
            namespace: http
  6. Applica il nuovo gateway e la nuova HTTPRoute:
    kubectl apply -f gateway2.yaml
  7. Controlla lo stato di HTTPRoute utilizzando il seguente comando:
    kubectl -n http get HttpRoute

    L'output dovrebbe essere simile al seguente:

    NAME             HOSTNAMES                                                  AGE
    http-bin-route   ["my-hostname-2"]   12d
    
  8. Controlla lo stato del gateway utilizzando il seguente comando:
    kubectl get gateway global-ext-lb2

    L'output dovrebbe essere simile al seguente:

    NAME             CLASS                            ADDRESS        PROGRAMMED   AGE
    global-ext-lb2   gke-l7-global-external-managed   34.54.193.92   True         11d
    

    Verifica che la colonna Address contenga un indirizzo IP valido e che lo stato di Programmed sia True.

  9. Descrivi il gateway per assicurarti che la rotta sia allegata:
    kubectl describe gateway global-ext-lb2
  10. L'output dovrebbe essere simile al seguente:

    ...
    Listeners:
      Attached Routes:  1
      Conditions:
        Last Transition Time:  2024-10-03T03:10:17Z
    ...

    Verifica che il valore di Attached Routes sia 1.

  11. Invia una richiesta al gateway per verificare che la route funzioni:
    curl -k -X POST https://GATEWAY_IP_ADDRESS/post -H "Host: HOST_NAME_2"

    Dove:

    • GATEWAY_IP_ADDRESS è l'indirizzo IP del gateway, come mostrato nella colonna Address della risposta restituita nel passaggio 7.
    • HOST_NAME_2 è il nome host definito in HTTPRoute del gateway.

  12. L'output dovrebbe essere simile al seguente:
      {
        "args": {},
        "headers": {
          "Accept": "*/*",
          "Host": "apigee-apim-operator-test.apigee.net",
          "User-Agent": "curl/8.7.1",
          "X-Cloud-Trace-Context": "2bb8a80e29e80662ff9cb89971c447d9/13083106619927322701"
        },
        "origin": "67.164.1.10,34.54.193.72",
        "url": "https://apigee-apim-operator-test.apigee.net/post"
      }
      
  13. Crea un nuovo criterio di estensione APIM che faccia riferimento a HTTPRoute del nuovo gateway creato in un passaggio precedente:
    1. Crea un nuovo file denominato apim-policy2.yaml nello spazio dei nomi apim.
    2. Copia i seguenti contenuti nel nuovo file:
      # apim-policy2.yaml
      apiVersion: apim.googleapis.com/v1
      kind: APIMExtensionPolicy
      metadata:
        name: global-ext-lb2-apim-policy-2
        namespace: apim
      spec:
        location: global
        failOpen: false
        timeout: 1000ms
        defaultSecurityEnabled: true
        targetRef: # identifies the Gateway where the extension should be installed
          name: global-ext-lb2
          kind: Gateway
          namespace: default
    3. Applica il nuovo criterio di estensione APIM:
      kubectl apply -f apim-policy2.yaml

      Una volta applicato il file, l'operatore APIM crea risorse di networking in background.

    4. Controlla lo stato delle norme relative alle estensioni APIM:
      kubectl -n apim get APIMExtensionPolicy

      L'output dovrebbe essere simile al seguente:

      NAME                           STATE        ERRORMESSAGE
      global-ext-lb2-apim-policy-2   RUNNING
      

      Verifica che il valore di STATE sia RUNNING.

    5. Attendi cinque minuti per assicurarti che le modifiche vengano propagate a tutte le istanze del bilanciatore del carico, quindi utilizza il seguente comando per verificare che una richiesta al nuovo gateway non vada a buon fine:
      curl -k -X POST https://GATEWAY_IP_ADDRESS/post -H "Host: HOST_NAME_2"

      Dove:

      • GATEWAY_IP_ADDRESS è l'indirizzo IP del gateway ottenuto in un passaggio precedente.
      • HOST_NAME_2 è il nome host definito in HTTPRoute del gateway.

      La richiesta dovrebbe non andare a buon fine con una risposta simile alla seguente:

      {
        "fault": {
          "faultstring": "Raising fault. Fault name : RF-insufficient-request-raise-fault",
          "detail": {
            "errorcode": "steps.raisefault.RaiseFault"
          }
        }
      }

      Ciò significa che l'estensione di servizio per Apigee è attiva e la verifica della chiave API e del token di accesso è applicata. Per i passaggi necessari per creare un'app per sviluppatori, ottenere una chiave API e testare il nuovo gateway con la chiave, consulta Test the Apigee service extension.

Aggiornamento di un prodotto API

Modifica un prodotto API esistente in modo che faccia riferimento alla nuova policy di estensione APIM:

  1. Crea un nuovo file denominato api-product-2.yaml nello spazio dei nomi apim.
  2. Copia i seguenti contenuti nel nuovo file:
    # api-product-2.yaml
    apiVersion: apim.googleapis.com/v1
    kind: APIProduct
    metadata:
      name: api-product-2
      namespace: apim
    spec:
      name: api-product-2
      approvalType: auto
      description: Http bin GET calls
      displayName: api-product-2
    EnforcementRefs:
      - name: global-ext-lb1-apim-policy
        kind: APIMExtensionPolicy
        group: apim.googleapis.com
        namespace: apim
      - name: global-ext-lb2-apim-policy
        kind: APIMExtensionPolicy
        group: apim.googleapis.com
        namespace: apim
      attributes:
      - name: access
        value: private
  3. Applica il nuovo file di prodotto API:
    kubectl apply -f api-product-2.yaml

    Saranno necessari circa tre minuti prima che le modifiche vengano applicate all'intero cluster.

In questo esempio, la sezione EnforcementRefs del prodotto API api-product-2 viene aggiornata in modo da fare riferimento sia a global-ext-lb1-apim-policy che a global-ext-lb2-apim-policy, come mostrato nelle parti evidenziate di yaml.

Crea un nuovo prodotto API

Crea un nuovo prodotto API:

  1. Crea un nuovo file denominato api-product-2.yaml nello spazio dei nomi apim.
  2. Copia i seguenti contenuti nel nuovo file:
    # api-product-2.yaml
    apiVersion: apim.googleapis.com/v1
    kind: APIProduct
    metadata:
      name: api-product-2
      namespace: apim
    spec:
      name: api-product-2
      approvalType: auto
      description: Http bin GET calls
      displayName: api-product-2
      enforcementRefs:
      - name: global-ext-lb2-apim-policy
        kind: APIMExtensionPolicy
        group: apim.googleapis.com
        namespace: apim
      attributes:
      - name: access
        value: private
  3. Applica il nuovo file di prodotto API:
    kubectl apply -f api-product-2.yaml

    Saranno necessari circa tre minuti prima che le modifiche vengano applicate all'intero cluster.

In questo esempio, la sezione EnforcementRefs del nuovo prodotto API api-product-2 viene creata per fare riferimento a global-ext-lb2-apim-policy, come mostrato nelle parti evidenziate di yaml.

Crea un nuovo insieme di operazioni API

Crea un nuovo insieme di operazioni API:

  1. Crea un nuovo file denominato item-set-post.yaml nello spazio dei nomi apim.
  2. Copia i seguenti contenuti nel nuovo file:
    # item-set-post.yaml
    apiVersion: apim.googleapis.com/v1
    kind: APIOperationSet
    metadata:
      name: item-set-post
      namespace: apim
    spec:
      apiProductRefs:
        - name: api-product-2
          kind: APIProduct
          group: apim.googleapis.com
          namespace: apim
      quota:
        limit: 1
        interval: 1
        timeUnit: minute
      restOperations:
        - name: PostItems
          path: "/post"
          methods:
          - POST
  3. Applica il nuovo file di set di operazioni API:
    kubectl apply -f item-set-post.yaml

    Saranno necessari circa tre minuti prima che le modifiche vengano applicate all'intero cluster.

In questo esempio, il valore restOperations del nuovo insieme di operazioni API item-set-post viene creato per fare riferimento al percorso /post, come mostrato nelle parti evidenziate del file.

Testare la nuova configurazione del gateway

Per testare la nuova configurazione del gateway, invia la seguente richiesta al nuovo percorso /post:

curl -k -X POST https://GATEWAY_IP_ADDRESS/post -H "Host: HOST_NAME_2"

Dove:

  • GATEWAY_IP_ADDRESS è l'indirizzo IP del gateway ottenuto in un passaggio precedente.
  • HOST_NAME è il nome host definito in HTTPRoute del gateway.

La richiesta dovrebbe riuscire e restituire una risposta simile alla seguente:

{
  "args": {},
  "headers": {
    "Accept": "*/*",
    "Host": "apigee-apim-operator-test.apigee.net",
    "User-Agent": "curl/8.7.1",
    "X-Api-Key": "f0N6sXXXclGXXXe0oP5XXXdA20PjgrP2x8xXXh7z4XXXKiYt",
    "X-Cloud-Trace-Context": "bb3a768787099bda628781188bfb318b/15554891713516675739"
  },
  "origin": "34.54.193.72",
  "url": "https://34.54.193.72/post"
}

Risoluzione dei problemi

Se riscontri problemi durante l'aggiornamento e l'estensione dei criteri di gestione delle API utilizzati con APIM Operator, consulta la sezione Risolvere i problemi di APIM Operator per trovare soluzioni agli errori comuni.

Passaggi successivi