Memperbarui kebijakan pengelolaan API dengan Operator APIM Apigee untuk Kubernetes

Halaman ini berlaku untuk Apigee, tetapi tidak untuk Apigee Hybrid.

Baca dokumentasi Apigee Edge.

Seiring kebutuhan pengelolaan API Anda berkembang dan berubah, Anda mungkin perlu menambahkan layanan baru ke cluster atau memperbarui rute dan opsi ingress yang ada. Halaman ini menjelaskan cara mengupdate cluster untuk menyelesaikan tugas berikut:

Sebelum memulai

Sebelum memulai tugas ini, pastikan Anda menyelesaikan langkah-langkah yang dijelaskan dalam Menerapkan kebijakan dengan Operator APIM Apigee untuk Kubernetes. Halaman ini mengasumsikan bahwa Anda telah menyiapkan cluster Google Kubernetes Engine (GKE), menginstal Operator APIM Apigee untuk Kubernetes, membuat Gateway Google Kubernetes Engine (GKE), dan menerapkan setidaknya satu kebijakan pengelolaan API ke Gateway.

Peran yang diperlukan

Jika Anda menetapkan peran yang diperlukan ke akun layanan seperti yang dijelaskan dalam Menginstal Operator APIM Apigee untuk Kubernetes, tidak diperlukan peran atau izin IAM tambahan untuk menyelesaikan tugas ini.

Anda dapat memilih untuk mengizinkan tindakan pada resource di cluster Google Kubernetes Engine menggunakan mekanisme role-based access control (RBAC) bawaan di Kubernetes. Untuk mengetahui informasi selengkapnya, lihat Mengizinkan tindakan dalam cluster menggunakan kontrol akses berbasis peran.

Menambahkan Gateway dan HTTPRoute baru

Di bagian ini, Anda akan menambahkan Gateway dan HTTPRoute baru ke cluster. Dalam panduan tugas sebelumnya, contoh konfigurasi menggunakan GKE Gateway eksternal. Jika beberapa Gateway di-deploy di region yang sama, gateway tersebut harus memiliki jenis yang sama (baik eksternal maupun internal). Oleh karena itu, contoh konfigurasi dalam panduan ini juga akan menggunakan Gateway eksternal.

Operator APIM dapat digunakan dengan gateway GKE internal atau eksternal, tetapi Anda tidak dapat men-deploy kedua jenis gateway tersebut di region yang sama.

Untuk menambahkan Gateway dan HTTPRoute baru ke cluster, selesaikan langkah-langkah berikut:

  1. Siapkan GKE Gateway eksternal baru. Untuk mengetahui informasi dan langkah-langkah selengkapnya, lihat Men-deploy Gateway eksternal.
  2. Buat file baru bernama gateway2.yaml dalam namespace apim.
  3. Salin konten berikut ke dalam file baru:
    # 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: apigee-lb-new-cert-sept
  4. Tambahkan HTTPRoute baru untuk /post ke file yang sama, seperti yang ditandai di bawah:
    # 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
  5. Terapkan Gateway dan HTTPRoute baru:
    kubectl apply -f gateway2.yaml
  6. Periksa status HTTPRoute menggunakan perintah berikut:
    kubectl -n http get HttpRoute

    Outputnya akan mirip dengan berikut ini:

    NAME             HOSTNAMES                                                  AGE
    http-bin-route   ["my-hostname-2"]   12d
    
  7. Periksa status Gateway menggunakan perintah berikut:
    kubectl get gateway global-ext-lb2

    Outputnya akan mirip dengan berikut ini:

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

    Pastikan kolom Address berisi alamat IP yang valid dan status Programmed adalah True.

  8. Jelaskan Gateway untuk memastikan rute terlampir:
    kubectl describe gateway global-ext-lb2
  9. Outputnya akan mirip dengan berikut ini:

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

    Pastikan nilai Attached Routes adalah 1.

  10. Kirim permintaan ke Gateway untuk memverifikasi bahwa rute berfungsi:
    curl -X POST http://GATEWAY_IP_ADDRESS/post -H "Host: HOST_NAME"

    Dengan keterangan:

    • GATEWAY_IP_ADDRESS adalah alamat IP Gateway, seperti yang ditunjukkan di kolom Address respons yang ditampilkan di Langkah 7.
    • HOST_NAME adalah nama host yang ditentukan di HTTPRoute Gateway.

  11. Outputnya akan mirip dengan berikut ini:
      {
        "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"
      }
      
  12. Buat Kebijakan Ekstensi APIM baru yang mereferensikan HTTPRoute Gateway baru yang dibuat pada langkah sebelumnya:
    1. Buat file baru bernama apim-policy2.yaml dalam namespace apim.
    2. Salin konten berikut ke dalam file baru:
      # apim-policy2.yaml
      apiVersion: apim.googleapis.com/v1alpha1
      kind: APIMExtensionPolicy
      metadata:
        name: global-ext-lb2-apim-policy-2
        namespace: apim
      spec:
        location: global
        failOpen: false
        timeout: 1000ms
        targetRef: # identifies the Gateway where the extension should be installed
          name: global-ext-lb2 
          kind: Gateway
          namespace: default
    3. Terapkan Kebijakan Ekstensi APIM baru:
      kubectl apply -f apim-policy2.yaml

      Setelah file diterapkan, Operator APIM akan membuat resource jaringan di latar belakang.

    4. Periksa status Kebijakan Ekstensi APIM:
      kubectl -n apim get APIMExtensionPolicy

      Outputnya akan mirip dengan berikut ini:

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

      Pastikan nilai STATE adalah RUNNING.

    5. Tunggu lima menit untuk memastikan perubahan diterapkan ke semua instance load balancer, lalu gunakan perintah berikut untuk memverifikasi bahwa permintaan ke Gateway baru gagal:
      curl -X POST http://GATEWAY_IP_ADDRESS/post -H "Host: HOSTNAME"

      Dengan keterangan:

      • GATEWAY_IP_ADDRESS adalah alamat IP Gateway yang diperoleh di langkah sebelumnya.
      • HOST_NAME adalah nama host yang ditentukan di HTTPRoute Gateway.

      Permintaan akan gagal dengan respons yang mirip dengan berikut:

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

      Artinya, ekstensi layanan ke Apigee aktif dan verifikasi kunci API dan token akses diterapkan. Untuk mengetahui langkah-langkah yang diperlukan guna membuat Aplikasi Developer, mendapatkan kunci API, dan menguji Gateway baru dengan kunci tersebut, lihat Menguji ekstensi layanan Apigee.

Memperbarui produk API

Ubah produk API yang ada untuk mereferensikan Kebijakan Ekstensi APIM yang baru:

  1. Buat file baru bernama api-product-2.yaml dalam namespace apim.
  2. Salin konten berikut ke dalam file baru:
    # api-product-2.yaml
    apiVersion: apim.googleapis.com/v1alpha1
    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. Terapkan file produk API baru:
    kubectl apply -f api-product-2.yaml

    Diperlukan waktu sekitar tiga menit agar perubahan diterapkan di seluruh cluster.

Dalam contoh ini, bagian EnforcementRefs dari produk API api-product-2 diperbarui untuk mereferensikan global-ext-lb1-apim-policy dan global-ext-lb2-apim-policy, seperti yang ditunjukkan di bagian yang ditandai pada yaml.

Membuat produk API baru

Buat produk API baru:

  1. Buat file baru bernama api-product-2.yaml dalam namespace apim.
  2. Salin konten berikut ke dalam file baru:
    # api-product-2.yaml
    apiVersion: apim.googleapis.com/v1alpha1
    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. Terapkan file produk API baru:
    kubectl apply -f api-product-2.yaml

    Diperlukan waktu sekitar tiga menit agar perubahan diterapkan di seluruh cluster.

Dalam contoh ini, bagian EnforcementRefs dari produk API baru api-product-2 dibuat untuk mereferensikan global-ext-lb2-apim-policy, seperti yang ditunjukkan pada bagian yang ditandai di yaml.

Membuat kumpulan operasi API baru

Buat kumpulan operasi API baru:

  1. Buat file baru bernama item-set-post.yaml dalam namespace apim.
  2. Salin konten berikut ke dalam file baru:
    # item-set-post.yaml
    apiVersion: apim.googleapis.com/v1alpha1
    kind: APIOperationSet
    metadata:
      name: item-set-post
      namespace: apim
    spec:
      apiProductRefs:
        - name: api-product-1
          kind: APIProduct
          group: apim.googleapis.com
          namespace: apim
      quota:
        limit: 1
        interval: 1
        timeUnit: minute
      restOperations:
        - name: PostItems
          path: "/post"
          methods:
          - POST
  3. Terapkan file kumpulan operasi API baru:
    kubectl apply -f item-set-post.yaml

    Diperlukan waktu sekitar tiga menit agar perubahan diterapkan di seluruh cluster.

Dalam contoh ini, nilai restOperations dari kumpulan operasi API baru item-set-post dibuat untuk mereferensikan jalur /post, seperti yang ditunjukkan di bagian file yang ditandai.

Menguji konfigurasi Gateway baru

Untuk menguji konfigurasi Gateway baru, kirim permintaan berikut ke jalur /post baru:

curl -X POST http://GATEWAY_IP_ADDRESS/post -H "Host: HOST_NAME"

Dengan keterangan:

  • GATEWAY_IP_ADDRESS adalah alamat IP Gateway yang diperoleh di langkah sebelumnya.
  • HOST_NAME adalah nama host yang ditentukan di HTTPRoute Gateway.

Permintaan akan berhasil dan menampilkan respons yang mirip dengan berikut:

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

Memecahkan masalah

Jika Anda mengalami masalah saat memperbarui dan memperluas kebijakan pengelolaan API yang digunakan dengan APIM Operator, lihat Memecahkan masalah APIM Operator untuk mengetahui solusi error umum.

Langkah berikutnya