Pemecahan masalah dan operasi untuk Multi Cluster Ingress


Pengontrol GKE Enterprise Ingress mengelola resource Compute Engine. Resource MultiClusterIngress dan MultiClusterService dipetakan ke resource Compute Engine yang berbeda, sehingga memahami hubungan antara resource ini akan membantu Anda memecahkan masalah. Misalnya, periksa resource MultiClusterIngress berikut:

apiVersion: extensions/v1beta1
kind: MultiClusterIngress
metadata:
  name: foo-ingress
spec:
  rules:
  - host: store.foo.com
    http:
      paths:
      - backend:
          serviceName: store-foo
          servicePort: 80
  - host: search.foo.com
    http:
      paths:
      - backend:
          serviceName: search-foo
          servicePort: 80

Compute Engine untuk pemetaan resource Multi Cluster Ingress

Tabel di bawah menunjukkan pemetaan resource fleet ke resource yang dibuat di cluster Kubernetes dan Google Cloud:

Resource Kubernetes Resource Google Cloud Deskripsi
MultiClusterIngress Aturan penerusan VIP load balancer HTTP(S).
Proxy target Setelan penghentian HTTP/S yang diambil dari anotasi dan blok TLS.
Peta URL Pemetaan jalur host virtual dari bagian aturan.
MultiClusterService Layanan Kubernetes Mendapatkan resource dari template.
Layanan backend Layanan backend dibuat untuk setiap pasangan (Service, ServicePort).
Network endpoint groups Kumpulan Pod backend yang berpartisipasi dalam Service.

Memeriksa resource load balancer Compute Engine

Setelah membuat load balancer, status Multi Cluster Ingress akan berisi nama setiap resource Compute Engine yang dibuat untuk menyusun load balancer. Contoh:

Name:         shopping-service
Namespace:    prod
Labels:       <none>
Annotations:  <none>
API Version:  networking.gke.io/v1beta1
Kind:         MultiClusterIngress
Metadata:
  Creation Timestamp:  2019-07-16T17:23:14Z
  Finalizers:
    mci.finalizer.networking.gke.io
Spec:
  Template:
    Spec:
      Backend:
        Service Name:  shopping-service
        Service Port:  80
Status:
  VIP:  34.102.212.68
  CloudResources:
    Firewalls: "mci-l7"
    ForwardingRules: "mci-abcdef-myforwardingrule"
    TargetProxies: "mci-abcdef-mytargetproxy"
    UrlMap: "mci-abcdef-myurlmap"
    HealthChecks: "mci-abcdef-80-myhealthcheck"
    BackendServices: "mci-abcdef-80-mybackendservice"
    NetworkEndpointGroups: "k8s1-neg1", "k8s1-neg2", "k8s1-neg3"

VIP tidak dibuat

Jika Anda tidak melihat VIP, mungkin terjadi error saat pembuatannya. Untuk mengetahui terjadinya error, jalankan perintah berikut:

kubectl describe mci shopping-service

Output-nya mungkin terlihat seperti ini:

Name:         shopping-service
Namespace:    prod
Labels:       <none>
Annotations:  <none>
API Version:  networking.gke.io/v1beta1
Kind:         MultiClusterIngress
Metadata:
  Creation Timestamp:  2019-07-16T17:23:14Z
  Finalizers:
    mci.finalizer.networking.gke.io
Spec:
  Template:
    Spec:
      Backend:
        Service Name:  shopping-service
        Service Port:  80
Status:
  VIP:  34.102.212.68
Events:
  Type     Reason  Age   From                              Message
  ----     ------  ----  ----                              -------
  Warning  SYNC    29s   multi-cluster-ingress-controller  error translating MCI prod/shopping-service: exceeded 4 retries with final error: error translating MCI prod/shopping-service: multiclusterservice prod/shopping-service does not exist

Dalam contoh ini, errornya adalah pengguna tidak membuat resource MultiClusterService yang direferensikan oleh MultiClusterIngress.

Respons 502

Jika load balancer memperoleh VIP, tetapi secara konsisten menyajikan respons 502, health check load balancer mungkin gagal. Health check dapat gagal karena dua alasan:

  1. Pod Aplikasi tidak responsif (misalnya, lihat proses debug Konsol Cloud).
  2. Firewall yang salah dikonfigurasi akan memblokir health checker Google untuk melakukan health check.

Dalam kasus #1, pastikan aplikasi Anda benar-benar menyajikan respons 200 pada jalur "/".

Dalam kasus #2, pastikan firewall bernama "mci-default-l7" ada di VPC Anda. Pengontrol Ingress membuat firewall di VPC Anda untuk memastikan health checker Google dapat menjangkau backend Anda. Jika firewall tidak ada, pastikan tidak ada otomatisasi eksternal yang menghapus firewall ini setelah dibuat.

Traffic tidak ditambahkan ke atau dihapus dari cluster

Saat menambahkan Keanggotaan baru, traffic harus menjangkau backend di cluster dasar jika memungkinkan. Demikian pula, jika Keanggotaan dihapus, tidak ada traffic yang akan menjangkau backend di cluster yang mendasarinya. Jika Anda tidak mengamati perilaku ini, periksa apakah ada error pada resource MultiClusterIngress dan MultiClusterService.

Kasus umum yang menyebabkan error ini terjadi adalah menambahkan Keanggotaan baru di cluster GKE yang tidak berada dalam mode native VPC atau menambahkan Keanggotaan baru tetapi tidak men-deploy aplikasi di cluster GKE.

  1. Jelaskan MultiClusterService:

    kubectl describe mcs zone-svc
    
  2. Jelaskan MultiClusterIngress:

    kubectl describe mci zone-mci
    

Migrasi cluster konfigurasi

Untuk memahami lebih lanjut kasus penggunaan migrasi, lihat Konsep desain cluster konfigurasi.

Migrasi cluster konfigurasi dapat menjadi operasi yang mengganggu jika tidak ditangani dengan benar. Ikuti panduan ini saat melakukan migrasi cluster konfigurasi:

  1. Pastikan untuk menggunakan anotasi static-ip pada resource MultiClusterIngress Anda. Jika hal ini tidak dilakukan, traffic akan terganggu saat migrasi. IP sementara akan dibuat ulang saat memigrasikan cluster konfigurasi.
  2. Resource MultiClusterIngress dan MultiClusterService harus di-deploy secara identik ke cluster konfigurasi yang sudah ada dan yang baru. Perbedaan di antara resource tersebut akan menghasilkan rekonsiliasi resource MultiClusterService dan MultiClusterIngress yang berbeda dalam cluster konfigurasi baru.
  3. Hanya satu cluster konfigurasi yang aktif kapan saja. Sebelum cluster konfigurasi diubah, resource MultiClusterIngress dan MultiClusterService di cluster konfigurasi baru tidak akan memengaruhi resource load balancer.

Untuk memigrasikan cluster konfigurasi, jalankan perintah berikut:

  gcloud container fleet ingress update \
    --config-membership=projects/project_id/locations/global/memberships/new_config_cluster

Verifikasi bahwa perintah dijalankan dengan memastikan tidak ada error yang terlihat dalam status Fitur:

  gcloud container fleet ingress describe

Proses debug konsol

Pada umumnya, memeriksa status load balancer yang tepat sangat membantu saat melakukan proses debug. Anda dapat menemukan load balancer dengan membuka Load balancing di Konsol Google Cloud.

Kode Error/Peringatan

Multi Cluster Ingress memunculkan kode error dan peringatan pada resource MultiClusterIngress dan MultiClusterService serta kolom Deskripsi multiclusteringress gcloud untuk masalah umum. Pesan ini telah mendokumentasikan kode error dan peringatan untuk memudahkan memahami apa artinya ketika sesuatu tidak beroperasi seperti yang diharapkan. Setiap kode terdiri dari ID error dalam format AVMBR123, dengan 123 adalah angka unik yang sesuai dengan error atau peringatan beserta saran cara mengatasinya.

AVMBR101: Annotation [NAME] not recognized

Error ini ditampilkan saat anotasi ditentukan pada manifes MultiClusterIngress atau MultiClusterService yang tidak dikenali. Ada beberapa alasan mengapa anotasi mungkin tidak dikenali:

  1. Anotasi tidak didukung di Multi Cluster Ingress. Hal ini mungkin dapat terjadi jika menganotasi resource yang tidak diharapkan digunakan oleh pengontrol Ingress GKE Enterprise.

  2. Anotasi didukung, tetapi salah eja sehingga tidak dikenali.

Untuk kedua kasus tersebut, lihat dokumentasi untuk memahami anotasi yang didukung dan cara menentukannya.

AVMBR102: [RESOURCE_NAME] not found

Error ini ditampilkan saat resource tambahan ditentukan dalam MultiClusterIngress, tetapi tidak dapat ditemukan dalam Keanggotaan Konfigurasi. Misalnya, error ini ditampilkan jika MultiClusterIngress merujuk ke MultiClusterService yang tidak dapat ditemukan, atau MultiClusterService merujuk pada BackendConfig yang tidak dapat ditemukan. Ada beberapa alasan mengapa resource tidak dapat ditemukan:

  1. Tidak berada dalam namespace yang benar. Pastikan bahwa resource yang saling merujuk berada dalam namespace yang sama.
  2. Nama resource salah eja.
  3. Resource ini benar-benar tidak ada dengan namespace + nama yang tepat. Jika demikian, buat namespace + nama yang tepat.

AVMBR103: [CLUSTER_SELECTOR] is invalid

Error ini ditampilkan saat pemilih cluster yang ditentukan pada MultiClusterService tidak valid. Ada beberapa alasan mengapa pemilih ini tidak valid:

  1. String yang diberikan berisi kesalahan ketik.
  2. String yang disediakan merujuk pada keanggotaan cluster yang sudah tidak ada lagi di fleet.

AVMBR104: Cannot find NEGs for Service Port [SERVICE_PORT]

Error ini ditampilkan saat NetworkEndpointGroup (NEG) untuk MultiClusterService tertentu dan pasangan port layanan tidak dapat ditemukan. NEG adalah resource yang berisi endpoint Pod di setiap cluster backend. Alasan utama kemungkinan tidak adanya NEG adalah karena terjadi error saat membuat atau memperbarui Service Turunan di cluster backend Anda. Lihat Peristiwa di resource MultiClusterService untuk informasi selengkapnya.

AVMBR105: Missing GKE Enterprise license.

Error ini ditampilkan di bagian status Feature, dan menunjukkan bahwa GKE Enterprise API (anthos.googleapis.com) tidak diaktifkan.

AVMBR106: Derived service is invalid: [REASON].

Error ini ditampilkan di bagian peristiwa resource MultiClusterService. Salah satu alasan umum terjadinya error ini adalah resource Service yang berasal dari MultiClusterService memiliki spesifikasi yang tidak valid.

Misalnya, MultiClusterService ini tidak memiliki ServicePort yang ditentukan dalam spesifikasinya.

apiVersion: networking.gke.io/v1
kind: MultiClusterService
metadata:
  name: zone-mcs
  namespace: whereami
spec:
  clusters:
  - link: "us-central1-a/gke-us"
  - link: "europe-west1-c/gke-eu"

Error ini ditampilkan di bagian status Fitur dan terjadi karena tidak ada cluster GKE yang mendasari resource Keanggotaan. Anda dapat memverifikasinya dengan menjalankan perintah berikut:

gcloud container fleet memberships describe membership-name

serta memastikan bahwa tidak ada link resource cluster GKE di bagian bawah kolom endpoint.

AVMBR108: GKE cluster [NAME] not found.

Error ini ditampilkan dalam status Fitur dan ditampilkan jika cluster GKE yang mendasari untuk Keanggotaan tidak ada.

AVMBR109: [NAME] is not a VPC-native GKE cluster.

Error ini ditampilkan di bagian status Fitur. Error ini ditampilkan jika cluster GKE yang ditentukan adalah cluster berbasis rute. Pengontrol Multi Cluster Ingress membuat load balancer berbasis container menggunakan NEG. Cluster harus berupa VPC native agar dapat menggunakan load balancer berbasis container.

Untuk informasi selengkapnya, lihat Membuat cluster VPC native.

AVMBR110: [IAM_PERMISSION] permission missing for GKE cluster [NAME].

Error ini ditampilkan di bagian status Fitur. Ada beberapa alasan terjadinya error ini:

  1. Cluster GKE yang mendasari untuk Keanggotaan terletak di project yang berbeda dengan Keanggotaan itu sendiri.
  2. Izin IAM yang ditentukan telah dihapus dari agen layanan MultiClusterIngress.

AVMBR111: Failed to get Config Membership: [REASON].

Error ini ditampilkan di bagian status Fitur. Alasan utama terjadinya error ini adalah karena Keanggotaan Konfigurasi dihapus saat Fitur diaktifkan.

Anda tidak perlu menghapus Keanggotaan Konfigurasi. Jika Anda ingin mengubahnya, ikuti langkah-langkah migrasi cluster konfigurasi.

AVMBR112: HTTPLoadBalancing Addon is disabled in GKE Cluster [NAME].

Error ini ditampilkan dalam status Fitur dan terjadi saat add-on HTTPLoadBalancing dinonaktifkan di cluster GKE. Anda dapat mengupdate cluster GKE untuk mengaktifkan add-on HTTPLoadBalancing:

gcloud container clusters update name --update-addons=HttpLoadBalancing=ENABLED

AVMBR113: This resource is orphaned.

Dalam beberapa kasus, kegunaan resource bergantung pada resource yang direkomendasikan oleh resource lain. Error ini ditampilkan saat resource Kubernetes dibuat, tetapi tidak direkomendasikan oleh resource lain. Misalnya, Anda akan melihat error ini jika membuat resource BackendConfig yang tidak direkomendasikan oleh MultiClusterService.