API-Verwaltungsrichtlinien mit dem Apigee APIM-Operator für Kubernetes aktualisieren

Diese Seite gilt für Apigee, aber nicht für Apigee Hybrid.

Apigee Edge-Dokumentation aufrufen

Wenn Ihre Anforderungen an die API-Verwaltung wachsen und sich ändern, müssen Sie möglicherweise neue Dienste zu Ihrem Cluster hinzufügen oder vorhandene Routen und Ingress-Optionen aktualisieren. Auf dieser Seite wird beschrieben, wie Sie Ihren Cluster aktualisieren, um die folgenden Aufgaben auszuführen:

Hinweise

Bevor Sie mit dieser Aufgabe beginnen, müssen Sie die Schritte unter Richtlinie mit dem Apigee APIM Operator für Kubernetes anwenden ausführen. Auf dieser Seite wird davon ausgegangen, dass Sie einen Google Kubernetes Engine-Cluster (GKE) eingerichtet, den Apigee APIM Operator für Kubernetes installiert, ein Google Kubernetes Engine-Gateway (GKE) erstellt und mindestens eine API-Verwaltungsrichtlinie auf das Gateway angewendet haben.

Erforderliche Rollen

Wenn Sie Ihrem Dienstkonto die erforderlichen Rollen zugewiesen haben, wie unter Apigee APIM Operator für Kubernetes installieren beschrieben, sind für diese Aufgaben keine zusätzlichen IAM-Rollen oder -Berechtigungen erforderlich.

Sie können Aktionen für Ressourcen in Ihrem Google Kubernetes Engine-Cluster mithilfe des integrierten Mechanismus für rollenbasierte Zugriffssteuerung (Role-Based Access Control, RBAC) in Kubernetes autorisieren. Weitere Informationen finden Sie unter Aktionen in Clustern mit rollenbasierter Zugriffssteuerung autorisieren.

Neues Gateway und neue HTTPRoute hinzufügen

In diesem Abschnitt fügen Sie Ihrem Cluster ein neues Gateway und eine neue HTTPRoute hinzu. In früheren Aufgabenanleitungen wurde in den Beispielkonfigurationen ein externes GKE-Gateway verwendet. Wenn mehrere Gateways in derselben Region bereitgestellt werden, müssen sie vom selben Typ sein (entweder beide extern oder beide intern). Aus diesem Grund wird in der Beispielkonfiguration in diesem Leitfaden auch ein externes Gateway verwendet.

Der APIM-Operator kann mit internen oder externen GKE-Gateways verwendet werden. Sie können jedoch nicht beide Arten von Gateways in derselben Region bereitstellen.

So fügen Sie Ihrem Cluster ein neues Gateway und eine neue HTTPRoute hinzu:

  1. Richten Sie ein neues externes GKE-Gateway ein. Weitere Informationen und Schritte finden Sie unter Externes Gateway bereitstellen.
  2. Erstellen Sie eine von Google verwaltete globale SslCertificate-Ressource:
    gcloud compute ssl-certificates create CERT_NAME \
      --domains=HOST_NAME \
      --global

    Wobei:

    • CERT_NAME ist der Name des Zertifikats, das Sie erstellen möchten.
    • HOST_NAME_2 ist der Hostname für das neue Gateway.

  3. Erstellen Sie eine neue Datei mit dem Namen gateway2.yaml im Namespace apim.
  4. Kopieren Sie den folgenden Inhalt in die neue Datei:
    # 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. Fügen Sie der Datei eine neue HTTPRoute für /post hinzu, wie unten hervorgehoben:
    # 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. Wenden Sie das neue Gateway und die neue HTTPRoute an:
    kubectl apply -f gateway2.yaml
  7. Prüfen Sie den HTTPRoute-Status mit dem folgenden Befehl::
    kubectl -n http get HttpRoute

    Die Ausgabe sollte in etwa so aussehen:

    NAME             HOSTNAMES                                                  AGE
    http-bin-route   ["my-hostname-2"]   12d
    
  8. Prüfen Sie den Gateway-Status mit dem folgenden Befehl:
    kubectl get gateway global-ext-lb2

    Die Ausgabe sollte in etwa so aussehen:

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

    Prüfen Sie, ob die Spalte Address eine gültige IP-Adresse enthält und der Status von Programmed True ist.

  9. Beschreiben Sie das Gateway, um sicherzustellen, dass die Route angehängt wird:
    kubectl describe gateway global-ext-lb2
  10. Die Ausgabe sollte in etwa so aussehen:

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

    Prüfen Sie, ob der Wert Attached Routes 1 ist.

  11. Senden Sie eine Anfrage an das Gateway, um zu prüfen, ob die Route funktioniert:
    curl -k -X POST https://GATEWAY_IP_ADDRESS/post -H "Host: HOST_NAME_2"

    Wobei:

    • GATEWAY_IP_ADDRESS ist die IP-Adresse des Gateways, wie in der Spalte Address der in Schritt 7 zurückgegebenen Antwort zu sehen ist.
    • HOST_NAME_2 ist der Hostname, der im HTTPRoute des Gateways definiert ist.

  12. Die Ausgabe sollte in etwa so aussehen:
      {
        "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. Erstellen Sie eine neue APIM-Erweiterungsrichtlinie, die auf die HTTPRoute des neuen Gateways verweist, das in einem vorherigen Schritt erstellt wurde:
    1. Erstellen Sie eine neue Datei mit dem Namen apim-policy2.yaml im Namespace apim.
    2. Kopieren Sie den folgenden Inhalt in die neue Datei:
      # 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. Wenden Sie die neue APIM-Erweiterungsrichtlinie an:
      kubectl apply -f apim-policy2.yaml

      Sobald die Datei angewendet wurde, erstellt der APIM-Operator im Hintergrund Netzwerkressourcen.

    4. Prüfen Sie den Status der APIM Extension Policy:
      kubectl -n apim get APIMExtensionPolicy

      Die Ausgabe sollte in etwa so aussehen:

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

      Prüfen Sie, ob der Wert STATE RUNNING ist.

    5. Warten Sie fünf Minuten, bis die Änderungen auf alle Load-Balancer-Instanzen übertragen wurden. Verwenden Sie dann den folgenden Befehl, um zu prüfen, ob eine Anfrage an das neue Gateway fehlschlägt:
      curl -k -X POST https://GATEWAY_IP_ADDRESS/post -H "Host: HOST_NAME_2"

      Wobei:

      • GATEWAY_IP_ADDRESS ist die IP-Adresse des Gateways, die Sie in einem früheren Schritt abgerufen haben.
      • HOST_NAME_2 ist der Hostname, der im HTTPRoute des Gateways definiert ist.

      Die Anfrage sollte mit einer Antwort ähnlich der folgenden fehlschlagen:

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

      Das bedeutet, dass die Dienst-Erweiterung für Apigee aktiv ist und die Überprüfung von API-Schlüsseln und Zugriffstokens erzwungen wird. Eine Anleitung zum Erstellen einer Entwickler-App, zum Abrufen eines API-Schlüssels und zum Testen des neuen Gateways mit dem Schlüssel finden Sie unter Apigee-Diensterweiterung testen.

API-Produkt aktualisieren

Ändern Sie ein vorhandenes API-Produkt, damit es auf die neue APIM-Erweiterungsrichtlinie verweist:

  1. Erstellen Sie eine neue Datei mit dem Namen api-product-2.yaml im Namespace apim.
  2. Kopieren Sie den folgenden Inhalt in die neue Datei:
    # 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. Neue API-Produktdatei anwenden:
    kubectl apply -f api-product-2.yaml

    Es dauert etwa drei Minuten, bis die Änderungen im gesamten Cluster übernommen werden.

In diesem Beispiel wird der Abschnitt EnforcementRefs des API-Produkts api-product-2 aktualisiert, um sowohl auf global-ext-lb1-apim-policy als auch auf global-ext-lb2-apim-policy zu verweisen, wie in den hervorgehobenen Abschnitten von yaml zu sehen ist.

Neues API-Produkt erstellen

So erstellen Sie ein neues API-Produkt:

  1. Erstellen Sie eine neue Datei mit dem Namen api-product-2.yaml im Namespace apim.
  2. Kopieren Sie den folgenden Inhalt in die neue Datei:
    # 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. Neue API-Produktdatei anwenden:
    kubectl apply -f api-product-2.yaml

    Es dauert etwa drei Minuten, bis die Änderungen im gesamten Cluster übernommen werden.

In diesem Beispiel wird der EnforcementRefs-Abschnitt des neuen API-Produkts api-product-2 erstellt, um auf global-ext-lb2-apim-policy zu verweisen, wie in den hervorgehobenen Teilen des yaml zu sehen ist.

Neue API-Vorgangsgruppe erstellen

So erstellen Sie eine neue Gruppe von API-Vorgängen:

  1. Erstellen Sie eine neue Datei mit dem Namen item-set-post.yaml im Namespace apim.
  2. Kopieren Sie den folgenden Inhalt in die neue Datei:
    # 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. Wenden Sie die neue Datei mit dem API-Vorgangssatz an:
    kubectl apply -f item-set-post.yaml

    Es dauert etwa drei Minuten, bis die Änderungen im gesamten Cluster übernommen werden.

In diesem Beispiel wird der restOperations-Wert des neuen API-Vorgangssatzes item-set-post erstellt, um auf den /post-Pfad zu verweisen, wie in den hervorgehobenen Abschnitten der Datei zu sehen ist.

Neue Gateway-Konfiguration testen

Senden Sie die folgende Anfrage an den neuen /post-Pfad, um die neue Gateway-Konfiguration zu testen:

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

Wobei:

  • GATEWAY_IP_ADDRESS ist die IP-Adresse des Gateways, die Sie in einem früheren Schritt abgerufen haben.
  • HOST_NAME ist der Hostname, der im HTTPRoute des Gateways definiert ist.

Die Anfrage sollte erfolgreich sein und eine Antwort ähnlich der folgenden zurückgeben:

{
  "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"
}

Fehlerbehebung

Wenn beim Aktualisieren und Erweitern der mit dem APIM Operator verwendeten API-Verwaltungsrichtlinien Probleme auftreten, finden Sie unter Fehlerbehebung beim APIM Operator Lösungen für häufige Fehler.

Nächste Schritte