Memecahkan Masalah Cloud Endpoints di GKE

Dokumen ini menyajikan teknik pemecahan masalah untuk deployment Endpoint di Google Kubernetes Engine (GKE) dan Kubernetes.

Gagal di kubectl create -f gke.yaml

Jika Anda melihat pesan error Failed in kubectl create -f gke.yaml, lakukan langkah-langkah berikut:

  1. Izinkan gcloud:

    gcloud auth login
    gcloud auth application-default login
    
  2. Membuat cluster. Anda dapat menggunakan perintah gcloud berikut, atau membuat cluster menggunakan Konsol Google Cloud.

    gcloud container clusters create CLUSTER_NAME
    

    Ganti CLUSTER_NAME dengan nama cluster Anda.

  3. Dapatkan kredensial untuk cluster Anda dan sediakan untuk kubectl:

    gcloud container clusters get-credentials CLUSTER_NAME
    

Metrik dan log endpoint tidak ditampilkan

Jika Anda berhasil mengirim permintaan ke API, tetapi tidak melihat metrik atau log di halaman Endpoint > Layanan di Konsol Google Cloud, lakukan langkah-langkah berikut:

  1. Pastikan semua layanan yang diperlukan sudah diaktifkan.
  2. Periksa apakah semua izin yang diperlukan diberikan.

Mengakses log dari Extensible Service Proxy

Jika Anda perlu mengakses log Extensible Service Proxy (ESP) untuk mendiagnosis masalah, gunakan kubectl seperti berikut:

  1. Mendapatkan nama pod:

    kubectl get pod
    
    NAME                       READY     STATUS    RESTARTS   AGE
    esp-echo-174578890-x09gl   2/2       Running   2          21s
    

    Nama pod adalah esp-echo-174578890-x09gl dan memiliki dua penampung: esp dan echo.

  2. Untuk melihat log dalam pod, gunakan kubectl logs:

    kubectl logs POD_NAME -c CONTAINER_NAME
    

    Dengan POD_NAME dan CONTAINER_NAME ditampilkan dari perintah kubectl get pod, di langkah sebelumnya. Contoh:

      kubectl logs esp-echo-174578890-x09gl -c esp
    

Memverifikasi nama layanan

Jika Anda melihat pesan error Fetching service config failed, pastikan nama layanan yang Anda tentukan dalam kolom --service dalam file manifes Deployment (disebut file deployment.yaml) cocok dengan nama di kolom host dalam dokumen OpenAPI Anda (disebut file openapi.yaml).

Jika nama yang salah dalam file deployment.yaml:

  1. Buka file deployment.yaml dan buka bagian yang dikonfigurasi untuk penampung ESP. Contoh:

    containers:
    - name: esp
      image: gcr.io/endpoints-release/endpoints-runtime:1
      args: [
        "--http_port=8081",
        "--backend=127.0.0.1:8080",
        "--service=SERVICE_NAME",
        "--rollout_strategy=managed"
      ]
    

    Ubah SERVICE_NAME agar cocok dengan nama di kolom host dalam openapi.yaml, lalu simpan file deployment.yaml.

  2. Mulai layanan Kubernetes:

      kubectl create -f deployment.yaml
    

Jika nama yang salah dalam file openapi.yaml:

  1. Dapatkan nama layanan yang dikonfigurasi untuk digunakan oleh Endpoint.

  2. Hapus layanan:

    gcloud endpoints services delete SERVICE_NAME
    

    Ganti SERVICE_NAME dengan nama dari langkah sebelumnya. Perlu waktu 30 hari hingga layanan dihapus dari Google Cloud. Anda tidak dapat menggunakan kembali nama layanan selama periode ini.

  3. Buka file openapi.yaml dan perbaiki nama di kolom host, lalu simpan file tersebut.

  4. Deploy konfigurasi layanan yang telah diupdate:

      gcloud endpoints services deploy openapi.yaml
    
  5. Tunggu hingga konfigurasi layanan berhasil di-deploy.

  6. Mulai layanan Kubernetes:

      kubectl create -f deployment.yaml
    

Memeriksa file konfigurasi

  1. Gunakan ssh untuk terhubung ke pod menggunakan kubectl:

    kubectl exec -ti -c CONTAINER_NAME POD_NAME bash
    

    Ganti CONTAINER_NAME dengan nama container dan POD_NAME dengan nama pod Anda.

  2. Dalam direktori etc/nginx/endpoints/, periksa file konfigurasi berikut untuk menemukan error:

    • nginx.conf- File konfigurasi nginx dengan perintah ESP
    • service.jso - File konfigurasi layanan

Mengakses halaman status Endpoint

Jika Anda menetapkan rollout_strategy ke managed saat memulai ESP, dan Anda perlu mencari tahu ID konfigurasi yang digunakan instance ESP, halaman status Endpoint akan memiliki informasi tersebut.

Untuk mengakses halaman status Endpoint:

  1. Gunakan ssh untuk terhubung ke pod menggunakan kubectl:

    kubectl exec -ti -c CONTAINER_NAME POD_NAME bash
    

    Ganti CONTAINER_NAME dengan nama penampung Anda dan POD_NAME dengan nama pod Anda.

  2. Instal curl.

  3. Masukkan:

      curl http://localhost:8090/endpoints_status
    

    Kode ini akan menampilkan sesuatu yang mirip seperti berikut:

    "serviceConfigRollouts": {
        "rolloutId": "2017-08-09r27",
        "percentages": {
             "2017-08-09r26": "100"
        }
    }
    

Nilai dalam rolloutId adalah ID konfigurasi layanan yang digunakan ESP. Untuk memastikan bahwa ESP menggunakan konfigurasi yang sama seperti Endpoint, lihat Mendapatkan nama layanan dan ID konfigurasi.