Menyelesaikan masalah Cloud Service Mesh terkelola

Dokumen ini menjelaskan masalah umum Cloud Service Mesh dan cara mengatasinya seperti saat pod diinjeksikan dengan istio.istio-system, penginstalan menghasilkan error seperti kode status 400 HTTP dan keanggotaan cluster yang sama.

Jika Anda memerlukan bantuan tambahan untuk memecahkan masalah Cloud Service Mesh, lihat Mendapatkan dukungan.

Revisi yang dilaporkan sebagai error tidak responsif

Anda mungkin melihat error Revision(s) reporting unhealthy umum jika layanan agen untuk Cloud Service Mesh terkelola tidak memiliki persyaratan Peran Identity and Access Management (IAM). Umumnya, ini terjadi ketika peran dicabut oleh konfigurasi ulang Terraform, Puppet, atau CI/CD.

Langkah-langkah yang diperlukan untuk memecahkan masalah error ini bergantung pada apakah Anda menggunakan konsol Google Cloud atau Google Cloud CLI.

Konsol Google Cloud

  1. Di Konsol Google Cloud, buka IAM & Admin > IAM Anda.

  2. Pilih Sertakan pemberian peran yang disediakan Google.

  3. Tinjau daftar Principal.

    Jika Anda melihat agen layanan dengan peran IAM yang diperlukan di daftar, maka hal itu dikonfigurasi dengan benar.

    Jika daftar tidak menyertakan agen layanan dan peran yang diperlukan, melanjutkan ke langkah berikutnya.

  4. Memberikan peran Anthos Service Mesh Service Agent (roles/anthosservicemesh.serviceAgent) ke layanan Cloud Service Mesh agen pada proyek. Untuk mengetahui petunjuknya, lihat Mengelola akses ke project, folder, dan organisasi.

Google Cloud CLI

  1. Di Google Cloud CLI, jalankan perintah berikut untuk memeriksa apakah peran IAM yang diperlukan telah diberikan:

    gcloud projects get-iam-policy PROJECT_ID  \
    --flatten="bindings[].members" \
    --filter="bindings.members:serviceAccount:service-PROJECT_NUMBER@gcp-sa-servicemesh. AND bindings.role:roles/anthosservicemesh.serviceAgent" \
    --format='table(bindings.role)'
    
  2. Tinjau daftar ROLE.

    Jika Anda melihat peran apa pun dalam daftar, berarti peran tersebut sudah dikonfigurasi dengan benar.

    Jika Anda tidak melihat peran apa pun di daftar, berarti peran yang diperlukan dicabut.

  3. Untuk memberikan peran yang diperlukan kepada agen layanan, jalankan perintah berikut berikut:

     gcloud projects add-iam-policy-binding PROJECT_ID \
     --member="serviceAccount:service-PROJECT_NUMBER@gcp-sa-servicemesh." \
     --role="roles/anthosservicemesh.serviceAgent"
    

Alat penginstalan menghasilkan error HTTP 400

Alat penginstalan mungkin menghasilkan error 400 HTTP seperti berikut:

HealthCheckContainerError, message: Cloud Run error: Container failed to start.
Failed to start and then listen on the port defined by the PORT environment
variable. Logs for this revision might contain more information.

Error dapat terjadi jika Anda tidak mengaktifkan Identitas Beban Kerja di cluster Kubernetes Anda, yang dapat Anda lakukan dengan menggunakan perintah berikut:

export CLUSTER_NAME=...
export PROJECT_ID=...
export LOCATION=...
gcloud container clusters update $CLUSTER_NAME --zone $LOCATION \
    --workload-pool=$PROJECT_ID.svc.id.goog

Status bidang data terkelola

Perintah berikut menampilkan status bidang data terkelola:

gcloud container fleet mesh describe --project PROJECT_ID

Tabel berikut mencantumkan semua kemungkinan status bidang data terkelola:

Status Kode Deskripsi
ACTIVE OK Bidang data terkelola berjalan normal.
DISABLED DISABLED Bidang data terkelola akan berada dalam status ini jika tidak ada namespace atau revisi dikonfigurasi untuk menggunakannya. Ikuti petunjuk untuk mengaktifkan Cloud Service Mesh terkelola melalui fleet API, atau mengaktifkan bidang data terkelola setelah menyediakan Cloud Service Mesh terkelola dengan asmcli. Perhatikan bahwa pelaporan status bidang data terkelola hanya tersedia jika Anda mengaktifkan bidang data terkelola dengan memberi anotasi pada namespace atau revisi. Menganotasi tiap pod menyebabkan pod tersebut dikelola, tetapi dengan status fitur DISABLED jika tidak ada namespace atau revisi yang dianotasi.
FAILED_PRECONDITION MANAGED_CONTROL_PLANE_REQUIRED Bidang data terkelola memerlukan kontrol Cloud Service Mesh yang terkelola dan aktif pesawat terbang.
PROVISIONING PROVISIONING Bidang data terkelola sedang disediakan. Jika keadaan ini tetap ada selama lebih dari 10 menit, kemungkinan terjadi kesalahan dan Anda seharusnya hubungi Dukungan.
STALLED INTERNAL_ERROR Bidang data terkelola diblokir agar tidak dapat beroperasi karena terjadi error internal . Jika masalah berlanjut, hubungi Dukungan.
NEEDS_ATTENTION UPGRADE_FAILURES Bidang data terkelola memerlukan intervensi manual untuk memindahkan layanan kembali ke keadaan normal. Untuk informasi selengkapnya dan cara mengatasi masalah ini, lihat Negara bagian NEEDS_ATTENTION.

NEEDS_ATTENTION state

Jika perintah gcloud container fleet mesh describe menunjukkan bahwa instance status bidang data dalam status NEEDS_ATTENTION dan kodenya adalah UPGRADE_FAILURES, berarti bidang data terkelola telah gagal mengupgrade sebagian besar workload standar dan berbasis cloud. Workload ini akan diberi label dataplane-upgrade: failed berdasarkan layanan bidang data terkelola untuk analisis lebih lanjut. {i>Proxy<i} harus dimulai ulang secara manual untuk diupgrade secara manual. Untuk mendapatkan daftar pod yang memerlukan perhatikan, jalankan perintah berikut:

kubectl get pods --all-namespaces -l dataplane-upgrade=failed

Error keanggotaan cluster (Tidak ada penyedia identitas yang ditentukan)

Alat penginstalan mungkin gagal dengan error keanggotaan Cluster seperti berikut ini:

asmcli: [ERROR]: Cluster has memberships.hub.gke.io CRD but no identity
provider specified. Please ensure that an identity provider is available for the
registered cluster.

Kesalahan dapat terjadi jika Anda tidak memiliki Workload Identity GKE diaktifkan sebelum mendaftarkan cluster tersebut. Anda dapat mendaftarkan ulang cluster menggunakan perintah baris dengan menggunakan Perintah gcloud container fleet memberships register --enable-workload-identity.

Memeriksa status bidang kontrol terkelola

Untuk memeriksa status bidang kontrol terkelola, jalankan gcloud container fleet mesh describe --project FLEET_PROJECT_ID.

Dalam responsnya, Kolom membershipStates[].servicemesh.controlPlaneManagement.details mungkin menjelaskan {i>error<i} yang spesifik.

Jika Anda memerlukan detail selengkapnya, lihat referensi khusus ControlPlaneRevision di cluster, yang diupdate saat bidang kontrol terkelola disediakan atau gagal dalam penyediaan.

Untuk memeriksa status resource, ganti NAME dengan nilai sesuai dengan setiap saluran: asm-managed, asm-managed-stable, atau asm-managed-rapid.

kubectl describe controlplanerevision NAME -n istio-system

Outputnya mirip dengan:

    Name:         asm-managed

    …

    Status:
      Conditions:
        Last Transition Time:  2021-08-05T18:56:32Z
        Message:               The provisioning process has completed successfully
        Reason:                Provisioned
        Status:                True
        Type:                  Reconciled
        Last Transition Time:  2021-08-05T18:56:32Z
        Message:               Provisioning has finished
        Reason:                ProvisioningFinished
        Status:                True
        Type:                  ProvisioningFinished
        Last Transition Time:  2021-08-05T18:56:32Z
        Message:               Provisioning has not stalled
        Reason:                NotStalled
        Status:                False
        Type:                  Stalled

Kondisi Reconciled menentukan apakah bidang kontrol terkelola berjalan dengan benar. Jika true, bidang kontrol berhasil berjalan. Stalled menentukan apakah proses penyediaan bidang kontrol terkelola telah mengalami error. Jika Stalled, kolom Message berisi lebih banyak informasi error tertentu. Lihat Kode macet untuk informasi selengkapnya tentang kemungkinan error.

Kode Terhenti ControlPlaneRevision

Ada beberapa alasan mengapa kondisi Stalled bisa menjadi benar di Status ControlPlaneRevisions.

Alasan Pesan Deskripsi
PreconditionFailed Hanya keanggotaan GKE yang didukung, tetapi ${CLUSTER_NAME} bukan cluster GKE. Cluster saat ini tampaknya bukan cluster GKE. Bidang kontrol terkelola hanya berfungsi pada Cluster GKE.
Nama ControlPlaneRevision tidak didukung: ${NAME} Nama ControlPlaneRevision harus berupa salah satu dari berikut ini:
  • dikelola ASM
  • ASM-terkelola-cepat
  • stabil-dikelola-asm
Namespace ControlPlaneRevision tidak didukung: ${NAMESPACE} Namespace ControlPlaneRevision harus istio-system.
Channel ${CHANNEL} tidak didukung untuk ControlPlaneRevision dengan nama${NAME}. Akan berlangsung ${OTHER_CHANNEL} Nama ControlPlaneRevision harus cocok dengan saluran ControlPlaneRevision dengan hal berikut:
  • dikelola asm -> reguler
  • asm-managed-rapid -> cepat
  • asm-managed-stable -> stabil
Saluran tidak boleh dihilangkan atau kosong Channel adalah kolom yang wajib diisi di ControlPlaneRevision. Parameter tidak ada atau kosong pada resource kustom.
Jenis revisi bidang kontrol tidak didukung: ${TYPE} managed_service adalah satu-satunya kolom yang diizinkan untuk kolom ControlPlaneRevisionType.
Versi Kubernetes yang tidak didukung: ${VERSION} Kubernetes versi 1.15+ didukung.
Workload identity tidak diaktifkan Aktifkan workload identity di cluster Anda.
Kumpulan beban kerja yang tidak didukung: ${POOL} Kumpulan workload harus dalam format ${PROJECT_ID}.svc.id.goog.
ProvisioningFailed Terjadi error saat memperbarui resource cluster Google tidak dapat memperbarui resource dalam cluster Anda seperti CRD dan webhook.
MutatingWebhookConfiguration "istiod-asm-managed" (MutatingWebhookConfiguration "istiod-asm-managed" (MutatingWebhookConfiguration) berisi webhook dengan URL ${EXISTING_URL} tetapi diharapkan ${ terjangkau_URL} Google tidak akan menimpa webhook yang ada untuk menghindari merusak penginstalan. Perbarui secara manual jika ini adalah perilaku yang diinginkan.
MemvalidasiWebhookConfiguration ${NAME} berisi webhook dengan URL ${EXISTING_URL}, tetapi yang diharapkan adalah ${ terjangkau_URL} Google tidak akan menimpa webhook yang ada untuk menghindari merusak penginstalan. Perbarui secara manual jika ini adalah perilaku yang diinginkan.

Mesh Layanan Cloud Terkelola tidak dapat terhubung ke cluster GKE

Antara Juni 2022 dan September 2022, Google telah menyelesaikan tugas keamanan yang terkait dengan Jaringan yang Diizinkan, fungsi Cloud Run, dan Cloud Run di Google Kubernetes Engine (GKE). Project yang sebelumnya menggunakan Cloud Service Mesh terkelola tetapi berhenti menggunakannya sebelum migrasi tidak memiliki API yang diperlukan untuk komunikasi antara Cloud Run dan GKE.

Dalam skenario ini, penyediaan Cloud Service Mesh terkelola akan gagal dan Cloud Logging akan menampilkan pesan error berikut:

Connect Gateway API has not been used in project [*PROJECT_NUMBER*] before or it is disabled.
Enable it by visiting https://console.developers.google.com/apis/api/connectgateway.googleapis.com/overview?project=[*PROJECT_NUMBER*] then retry.
If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.

Filter pesan ini menggunakan kueri berikut:

resource.type="istio_control_plane"
resource.labels.project_id=[*PROJECT_ID*]
resource.labels.location=[*REGION*]
severity=ERROR
jsonPayload.message=~"Connect Gateway API has not been used in project"

Sementara itu, injeksi file bantuan dan deployment resource kustom Kubernetes terkait Cloud Service Mesh juga akan gagal dan Cloud Logging akan menampilkan pesan peringatan berikut:

Error creating: Internal error occurred: failed calling webhook
"rev.namespace.sidecar-injector.istio.io": failed to call webhook: an error on
the server ("unknown") has prevented the request from succeeding.

Filter pesan ini menggunakan kueri berikut:

resource.type="k8s_cluster"
resource.labels.project_id=[*PROJECT_ID*]
resource.labels.location=[*REGION*]
resource.labels.cluster_name=[*CLUSTER_NAME*]
severity=WARNING
jsonPayload.message=~"Internal error occurred: failed calling webhook"

Untuk mengatasi masalah ini:

  1. Aktifkan connectgateway API yang diperlukan:

     gcloud services enable connectgateway.googleapis.com --project=[*PROJECT_ID*]
    
  2. Instal ulang Cloud Service Mesh terkelola.

  3. Lakukan mulai ulang berkelanjutan pada workload.

Google Cloud API tidak diaktifkan

Jika fleet Cloud Service Mesh terkelola Anda menggunakan TRAFFIC_DIRECTOR penerapan bidang kontrol, maka API tertentu harus diaktifkan.

  1. Aktifkan semua API yang diperlukan, termasuk yang tercantum sebagai "Dapat Dinonaktifkan" jika tidak menggunakan Cloud Service Mesh terkelola.

    gcloud services enable --project=[*PROJECT_ID*] \
        trafficdirector.googleapis.com \
        networkservices.googleapis.com \
        networksecurity.googleapis.com
    
  2. Pastikan Anda tidak memiliki alat otomatis yang akan mengembalikannya berubah. Jika error ini berulang, perbarui konfigurasi yang relevan atau daftar yang diizinkan.

Federasi Identitas Workload NodePool untuk GKE dinonaktifkan

Perintah berikut menampilkan status Cloud Service Mesh terkelola:

    gcloud container fleet mesh describe

Anda mungkin melihat kode error NODEPOOL_WORKLOAD_IDENTITY_FEDERATION_REQUIRED di kolom Conditions keanggotaan Anda:

    membershipStates:
      projects/test-project/locations/us-central1/memberships/my-membership:
        servicemesh:
          conditions:
          - code: NODEPOOL_WORKLOAD_IDENTITY_FEDERATION_REQUIRED
            details: One or more node pools have workload identity federation disabled.
            documentationLink: https://cloud.google.com/kubernetes-engine/docs/how-to/workload-identity
            severity: ERROR
          controlPlaneManagement:
            details:
            - code: REVISION_FAILED_PRECONDITION
              details: Required in-cluster components are not ready. This will be retried
                within 15 minutes.
            implementation: TRAFFIC_DIRECTOR
            state: FAILED_PRECONDITION

Error ini ditampilkan jika cluster GKE tidak memiliki Workload Identity Federation diaktifkan pada semua kumpulan node dari cluster tersebut, karena ini merupakan prasyarat untuk untuk penginstalan Cloud Service Mesh.

Untuk mengatasi pesan error ini, Anda harus mengikuti petunjuk untuk Mengaktifkan Workload Identity Federation pada semua kumpulan node. Perhatikan bahwa pengaktifan dapat bervariasi bergantung pada tentang cluster kustom ini.

Setelah diaktifkan, pesan error akan otomatis dihapus dan cluster harus kembali ke status ACTIVE. Jika masalah masih berlanjut dan Anda perlu bantuan tambahan, lihat Mendapatkan dukungan.