Memperbarui kebijakan pengelolaan API dengan Operator APIM Apigee untuk Kubernetes

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

Lihat dokumentasi Apigee Edge.

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

Sebelum memulai

Sebelum memulai tugas ini, pastikan Anda menyelesaikan langkah-langkah yang dijelaskan dalam Menerapkan kebijakan dengan Apigee APIM Operator untuk Kubernetes. Halaman ini mengasumsikan bahwa Anda telah menyiapkan cluster Google Kubernetes Engine (GKE), menginstal Apigee APIM Operator 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 Apigee APIM Operator untuk Kubernetes, tidak ada peran atau izin IAM tambahan yang diperlukan 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 Memberikan otorisasi pada tindakan dalam cluster menggunakan role-based access control.

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 (keduanya eksternal atau keduanya 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 di region yang sama.

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

  1. Siapkan Gateway GKE eksternal baru. Untuk mengetahui informasi dan langkah-langkah selengkapnya, lihat Men-deploy Gateway eksternal.
  2. Buat resource SslCertificate global yang dikelola Google:
    gcloud compute ssl-certificates create CERT_NAME \
      --domains=HOST_NAME \
      --global

    Dengan:

    • CERT_NAME adalah nama sertifikat yang ingin Anda buat.
    • HOST_NAME_2 adalah nama host untuk Gateway baru.

  3. Buat file baru bernama gateway2.yaml dalam namespace apim.
  4. 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: CERT_NAME
  5. 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
  6. Terapkan Gateway dan HTTPRoute baru:
    kubectl apply -f gateway2.yaml
  7. 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
    
  8. 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.

  9. Jelaskan Gateway untuk memastikan rute terlampir:
    kubectl describe gateway global-ext-lb2
  10. 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.

  11. Kirim permintaan ke Gateway untuk memverifikasi bahwa rute berfungsi:
    curl -k -X POST https://GATEWAY_IP_ADDRESS/post -H "Host: HOST_NAME_2"

    Dengan:

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

  12. 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"
      }
      
  13. 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/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. 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 disebarkan ke semua instance load balancer, lalu gunakan perintah berikut untuk memverifikasi bahwa permintaan ke Gateway baru gagal:
      curl -k -X POST https://GATEWAY_IP_ADDRESS/post -H "Host: HOST_NAME_2"

      Dengan:

      • GATEWAY_IP_ADDRESS adalah alamat IP Gateway yang diperoleh pada langkah sebelumnya.
      • HOST_NAME_2 adalah nama host yang ditentukan dalam 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 serta token akses diterapkan. Untuk mengetahui langkah-langkah yang diperlukan untuk membuat Aplikasi Developer, mendapatkan kunci API, dan menguji Gateway baru Anda dengan kunci tersebut, lihat Menguji ekstensi layanan Apigee.

Memperbarui produk API

Ubah produk API yang ada untuk mereferensikan Kebijakan Ekstensi APIM 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/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. Menerapkan 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 dalam bagian yaml yang ditandai.

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/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. Menerapkan 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 dalam bagian yaml yang ditandai.

Membuat set operasi API baru

Buat set 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/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. Terapkan file set 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 set operasi API baru item-set-post dibuat untuk mereferensikan jalur /post, seperti yang ditunjukkan dalam bagian file yang ditandai.

Menguji konfigurasi Gateway baru

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

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

Dengan:

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

Permintaan akan berhasil dan menampilkan respons yang mirip dengan berikut ini:

{
  "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 Operator APIM, lihat Memecahkan masalah Operator APIM untuk mengetahui solusi atas error umum.

Langkah berikutnya