Menggunakan kebijakan pengelolaan API dengan Operator APIM Apigee untuk Kubernetes

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

Baca dokumentasi Apigee Edge.

Halaman ini menjelaskan cara mengubah Gateway Google Kubernetes Engine (GKE) yang berjalan di cluster Anda untuk menerapkan kebijakan pengelolaan Apigee API menggunakan Operator Apigee APIM untuk Kubernetes (Pratinjau).

Sebelum memulai

Sebelum memulai tugas ini, pastikan untuk menyelesaikan langkah-langkah berikut:

Peran yang diperlukan

Jika Anda menetapkan peran yang diperlukan ke akun layanan seperti yang dijelaskan dalam Menginstal Operator APIM Apigee 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.

Ringkasan

Bagian berikut menjelaskan langkah-langkah yang diperlukan untuk mengubah GKE Gateway Anda agar menggunakan kebijakan Apigee menggunakan APIM Operator. Dalam panduan ini, Anda akan:

  1. Menentukan kebijakan Ekstensi APIM.
  2. Menentukan produk API.
  3. Menentukan kumpulan operasi API.
  4. Uji ekstensi layanan Apigee.
  5. Lihat Analisis API Apigee di konsol Google Cloud.

Menentukan kebijakan Ekstensi APIM

Pada langkah ini, Anda akan menentukan kebijakan Ekstensi APIM dan menerapkannya ke GKE Gateway yang berjalan di cluster Anda. Kebijakan ini mengatur semua traffic yang melewati Gateway dan HTTPRoutes terkait, yang beroperasi mirip dengan flowhook di tingkat lingkungan di Apigee saat ini.

Tentukan kebijakan Ekstensi APIM:

  1. Buat file baru bernama global-ext-lb1-apim-policy.yaml dalam namespace apim.
  2. Salin konten berikut ke dalam file baru:
    # global-ext-lb1-apim-policy.yaml
    apiVersion: apim.googleapis.com/v1alpha1
    kind: APIMExtensionPolicy
    metadata:
      name: global-ext-lb1-apim-policy 
      namespace: apim
    spec:
      apigeeenv: ENV_NAME # optional
      location: global
      failOpen: false
      timeout: 1000ms
      targetRef: # identifies the Gateway where the extension should be applied
        name: global-ext-lb1 
        kind: Gateway
        namespace: default

    Dengan ENV_NAME adalah nama lingkungan Apigee yang dibuat di langkah penginstalan Membuat lingkungan Apigee.

    Anda dapat melihat semua lingkungan yang tersedia di halaman Apigee Environments di konsol Google Cloud:

    Buka Lingkungan

  3. Terapkan kebijakan:
    kubectl -n apim apply -f global-ext-lb1-apim-policy.yaml

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

  4. Periksa status kebijakan Ekstensi API menggunakan perintah berikut:
    kubectl -n apim get APIMExtensionPolicy

    Outputnya akan terlihat seperti berikut, dengan State dari RUNNING:

    NAME                         STATE      ERRORMESSAGE
    global-ext-lb1-apim-policy   RUNNING  
  5. Gunakan perintah berikut untuk mengirim permintaan ke Gateway:
    curl http://GATEWAY_IP_ADDRESS/get -H "Host: HOST_NAME"

    Dengan keterangan:

    • GATEWAY_IP_ADDRESS adalah alamat IP Gateway. Anda dapat mengambil alamat IP Gateway menggunakan perintah berikut, dengan GATEWAY_NAME adalah nama Gateway:
      kubectl get gateways.gateway.networking.k8s.io GATEWAY_NAME -o=jsonpath="{.status.addresses[0].value}"
    • HOST_NAME adalah nama host yang ditentukan di HTTPRoute Gateway.
  6. 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"}}}

    Hal ini menunjukkan bahwa kebijakan ekstensi Apigee aktif dan penerapan kunci API serta verifikasi token akses aktif.

Menentukan Produk API

Tentukan produk API:

  1. Buat file baru bernama api-product.yaml dalam namespace apim.
  2. Salin konten berikut ke dalam file baru:
    # api-product.yaml
      apiVersion: apim.googleapis.com/v1alpha1
      kind: APIProduct
      metadata:
        name: api-product
        namespace: apim
      spec:
        approvalType: auto
        description: Http bin GET calls
        displayName: api-product
        enforcementRefs:
          - name: global-ext-lb1-apim-policy
            kind: APIMExtensionPolicy
            group: apim.googleapis.com
            namespace: apim
        attributes:
          - name: access
            value: private
  3. Terapkan file ke Gateway menggunakan perintah berikut:
    kubectl -n apim apply -f api-product.yaml

Menentukan kumpulan operasi API

Tentukan kumpulan operasi API untuk produk API yang dibuat pada langkah sebelumnya:

  1. Buat file baru bernama apim-policies.yaml dalam namespace apim.
  2. Salin konten berikut ke dalam file baru. File ini menentukan kebijakan kuota dan operasi rest yang tersedia untuk produk API yang ditentukan pada langkah sebelumnya:
    # apim-policies.yaml
      apiVersion: apim.googleapis.com/v1alpha1
      kind: APIOperationSet
      metadata:
        name: item-set
      spec:
        apiProductRefs:
          - name: api-product
            kind: APIProduct
            group: apim.googleapis.com
            namespace: apim
        quota:
          limit: 10
          interval: 1
          timeUnit: minute
        restOperations:
          - name: GetItems
            path: /get
            methods:
              - GET
  3. Terapkan file ke Gateway:
    kubectl -n apim apply -f apim-policies.yaml

Menguji ekstensi layanan Apigee

Pada langkah ini, Anda akan menggunakan UI Apigee di konsol Google Cloud untuk menguji ekstensi layanan Apigee dan kebijakan ekstensi Apigee yang diterapkan ke Gateway Anda.

Menyiapkan pengujian

Siapkan resource API yang Anda perlukan untuk pengujian:

  1. Buka halaman Pengelolaan API Apigee di konsol Google Cloud:

    Pengelolaan API Apigee

  2. Pilih organisasi Apigee tempat Anda menginstal Operator APIM.
  3. Membuat developer:
    1. Pilih Distribusi > Developer.
    2. Di halaman Developer, klik + Buat.
    3. Di halaman Tambahkan developer, isi kolom yang diperlukan menggunakan nilai yang Anda inginkan.
    4. Klik Tambahkan.
  4. Membuat Aplikasi:
    1. Pilih Distribusi> Aplikasi.
    2. Di halaman Aplikasi, klik + Buat
    3. Di halaman Create App, isi kolom yang diperlukan di bagian App Details menggunakan nilai berikut:
      • Nama aplikasi: demo-app
      • Developer: Pilih developer yang Anda buat di langkah sebelumnya, atau developer lain dari daftar.
    4. Di bagian App Credentials, klik + Add Credential.
    5. Di bagian Kredensial, isi kolom yang diperlukan di bagian Detail Kredensial dengan nilai berikut:
      • Nama kredensial: demo-credential
      • Jenis kredensial: Pilih Kunci API.
    6. Klik Buat.
    7. Di bagian Products, klik + Add products.
    8. Pilih api-product-1 yang dibuat pada langkah sebelumnya.
    9. Klik Tambahkan.
    10. Klik Buat.
  5. Di halaman App Details, di bagian Credential, klik untuk menampilkan nilai Key.

    Salin nilai Key. Anda akan menggunakan kunci ini untuk melakukan panggilan API ke layanan Anda pada langkah berikutnya.

  6. Di halaman App Details, di bagian Credential, klik untuk menampilkan nilai App Secret.

    Salin nilai Rahasia aplikasi. Anda akan menggunakan nilai ini untuk membuat token akses di langkah berikutnya.

Menguji penerapan kunci API

Gunakan perintah berikut untuk mengirim permintaan ke Gateway menggunakan kunci API yang diperoleh pada langkah sebelumnya:

curl http://GATEWAY_IP_ADDRESS/get -H "Host: HOST_NAME" -H "x-api-key: API_KEY"

Dengan keterangan:

  • GATEWAY_IP_ADDRESS adalah alamat IP Gateway. Anda dapat mengambil alamat IP Gateway menggunakan perintah berikut, dengan GATEWAY_NAME adalah nama Gateway:
    kubectl get gateways.gateway.networking.k8s.io GATEWAY_NAME -o=jsonpath="{.status.addresses[0].value}"
  • HOST_NAME adalah nama host yang ditentukan di HTTPRoute Gateway.
  • API_KEY adalah nilai kunci API yang diperoleh di Menyiapkan pengujian.

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/get"
}

Menguji penerapan kuota

Untuk menguji penerapan kuota yang ditentukan dalam kebijakan ekstensi APIM, kirim permintaan dari langkah sebelumnya ke Gateway sepuluh kali dalam rentang waktu satu menit.

Anda dapat menjalankan skrip berikut untuk membuat permintaan:

#!/bin/sh
for i in $(seq 1 11); do
    curl http://GATEWAY_IP_ADDRESS/get -H "Host: HOST_NAME" -H "x-api-key: API_KEY"
    sleep 1
done

Dengan keterangan:

  • GATEWAY_IP_ADDRESS adalah alamat IP Gateway. Anda dapat mengambil alamat IP Gateway menggunakan perintah berikut, dengan GATEWAY_NAME adalah nama Gateway:
    kubectl get gateways.gateway.networking.k8s.io GATEWAY_NAME -o=jsonpath="{.status.addresses[0].value}"
  • HOST_NAME adalah nama host yang ditentukan di HTTPRoute Gateway.
  • API_KEY adalah nilai kunci API yang diperoleh di Menyiapkan pengujian.

Tindakan ini akan memicu pelanggaran kuota dan menimbulkan error yang mirip dengan berikut:

{"fault":{"faultstring":"Rate limit quota violation. Quota limit  exceeded. Identifier : _default","detail":{"errorcode":"policies.ratelimit.QuotaViolation"}}}

Menguji penerapan operasi REST

Untuk menguji penerapan operasi API, gunakan perintah berikut untuk mengirim permintaan ke Gateway menggunakan URL yang tidak ada dalam kumpulan operasi API:

curl http://GATEWAY_IP_ADDRESS/post -H "Host: HOST_NAME" -H "x-api-key: API_KEY"

Dengan keterangan:

  • GATEWAY_IP_ADDRESS adalah alamat IP Gateway. Anda dapat mengambil alamat IP Gateway menggunakan perintah berikut, dengan GATEWAY_NAME adalah nama Gateway:
    kubectl get gateways.gateway.networking.k8s.io GATEWAY_NAME -o=jsonpath="{.status.addresses[0].value}"
  • HOST_NAME adalah nama host yang ditentukan di HTTPRoute Gateway.
  • API_KEY adalah nilai kunci API yang diperoleh di Menyiapkan pengujian.

Permintaan akan gagal dengan respons yang mirip dengan berikut:

{"fault":{"faultstring":"Invalid ApiKey for given resource","detail":{"errorcode":"oauth.v2.InvalidApiKeyForGivenResource"}}}

Melihat Analisis API Apigee di konsol Google Cloud

Anda dapat melihat traffic API yang ditangani oleh GKE Gateway dan APIMExtensionPolicy yang Anda instal menggunakan Apigee API Analytics di konsol Google Cloud:

  1. Buka halaman Pengelolaan API Apigee di konsol Google Cloud:

    Pengelolaan API Apigee

  2. Pilih organisasi Apigee tempat Anda menginstal Operator APIM.
  3. Pilih Analytics > API metrics di menu navigasi samping.
  4. Di tab Performa Proxy API, pilih lingkungan yang Anda buat di langkah penginstalan opsional Membuat lingkungan Apigee, atau lingkungan yang dibuat oleh Operator APIM selama penginstalan. Nama lingkungan akan dimulai dengan awalan apigee-ext-proc-enabled-env.
  5. Amati traffic API yang dicatat.

Memecahkan masalah

Jika Anda mengalami masalah saat menggunakan kebijakan pengelolaan API dengan APIM Operator, lihat Memecahkan masalah APIM Operator untuk mengetahui solusi error umum.

Langkah berikutnya