Menyelesaikan masalah Cloud Service Mesh terkelola
Dokumen ini menjelaskan masalah umum Cloud Service Mesh dan cara mengatasinya, seperti saat pod dimasukkan dengan istio.istio-system
, alat penginstalan akan menghasilkan error seperti kode status HTTP 400
dan error keanggotaan cluster.
Jika Anda memerlukan bantuan tambahan untuk memecahkan masalah Cloud Service Mesh, lihat Mendapatkan dukungan.
Revisi melaporkan error yang tidak sehat
Anda mungkin melihat error Revision(s) reporting unhealthy
umum jika agen layanan untuk Cloud Service Mesh terkelola tidak memiliki peran Identity and Access Management (IAM) yang diperlukan. Umumnya, hal ini terjadi saat 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
Di konsol Google Cloud, buka IAM & Admin > IAM.
Pilih Sertakan pemberian peran yang disediakan Google.
Tinjau daftar Prinsipal.
Jika Anda melihat agen layanan dengan peran IAM yang diperlukan dalam daftar, berarti agen layanan tersebut dikonfigurasi dengan benar.
Jika daftar tidak menyertakan agen layanan dan peran yang diperlukan, lanjutkan ke langkah berikutnya.
Berikan peran Agen Layanan Anthos Service Mesh (
roles/anthosservicemesh.serviceAgent
) kepada agen layanan Cloud Service Mesh di project. Untuk mengetahui petunjuknya, lihat Mengelola akses ke project, folder, dan organisasi.
Google Cloud CLI
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.iam.gserviceaccount.com AND bindings.role:roles/anthosservicemesh.serviceAgent" \ --format='table(bindings.role)'
Tinjau daftar
ROLE
.Jika Anda melihat peran dalam daftar, berarti peran tersebut telah dikonfigurasi dengan benar.
Jika Anda tidak melihat peran apa pun dalam daftar, berarti peran yang diperlukan telah dicabut.
Untuk memberikan peran yang diperlukan kepada agen layanan, jalankan perintah berikut:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:service-PROJECT_NUMBER@gcp-sa-servicemesh.iam.gserviceaccount.com" \ --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 Workload Identity di cluster Kubernetes, 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 data plane 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 |
Data plane terkelola akan berada dalam status ini jika tidak ada namespace atau revisi
yang 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 menganotasi namespace atau revisi.
Memberi anotasi pada setiap pod akan menyebabkan pod tersebut dikelola, tetapi dengan
status fitur DISABLED jika tidak ada namespace atau revisi
yang dianotasikan. |
FAILED_PRECONDITION |
MANAGED_CONTROL_PLANE_REQUIRED |
Bidang data terkelola memerlukan bidang kontrol Cloud Service Mesh terkelola yang aktif. |
PROVISIONING |
PROVISIONING |
Bidang data terkelola sedang disediakan. Jika status ini terus berlanjut selama lebih dari 10 menit, kemungkinan telah terjadi error dan Anda harus menghubungi Dukungan. |
STALLED |
INTERNAL_ERROR |
Bidang data terkelola diblokir agar tidak beroperasi karena kondisi error internal. Jika masalah berlanjut, hubungi Dukungan. |
NEEDS_ATTENTION |
UPGRADE_FAILURES |
Platform data terkelola memerlukan intervensi manual untuk mengembalikan
layanan ke status normal. Untuk informasi selengkapnya dan cara mengatasi
masalah ini, lihat
status NEEDS_ATTENTION . |
NEEDS_ATTENTION
state
Jika perintah gcloud container fleet mesh describe
menunjukkan bahwa status
panel data terkelola berada dalam status NEEDS_ATTENTION
dan kodenya adalah
UPGRADE_FAILURES
, berarti panel data terkelola telah gagal mengupgrade beban kerja
tertentu. Workload ini akan diberi label dataplane-upgrade: failed
oleh
layanan platform data terkelola untuk analisis lebih lanjut. Proksi harus
dimulai ulang secara manual untuk diupgrade. Untuk mendapatkan daftar pod yang memerlukan perhatian, 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 Langganan cluster seperti berikut:
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.
Error ini dapat terjadi jika Anda tidak
mengaktifkan workload identity GKE
sebelum mendaftarkan cluster. Anda dapat mendaftarkan ulang cluster di command line
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 respons, kolom membershipStates[].servicemesh.controlPlaneManagement.details
mungkin menjelaskan error tertentu.
Jika Anda memerlukan detail selengkapnya, periksa resource kustom ControlPlaneRevision
di cluster, yang diperbarui saat penyediaan panel kontrol terkelola disediakan atau gagal disediakan.
Untuk memeriksa status resource, ganti NAME dengan nilai
yang 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
, berarti bidang kontrol berhasil berjalan.
Stalled
menentukan apakah proses penyediaan bidang kontrol terkelola telah
mengalami error. Jika Stalled
, kolom Message
berisi informasi
selengkapnya tentang error tertentu. Lihat
Kode yang terhenti untuk mengetahui informasi selengkapnya tentang kemungkinan error.
Kode ControlPlaneRevision Stalled
Ada beberapa alasan kondisi Stalled
dapat menjadi benar dalam
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 di cluster GKE. |
Nama ControlPlaneRevision tidak didukung: ${NAME} | Nama ControlPlaneRevision harus berupa salah satu dari berikut:
|
|
Namespace ControlPlaneRevision tidak didukung: ${NAMESPACE} | Namespace ControlPlaneRevision harus istio-system . |
|
Channel ${CHANNEL} tidak didukung untuk ControlPlaneRevision dengan nama${NAME}. Diharapkan ${OTHER_CHANNEL} | Nama ControlPlaneRevision harus cocok dengan saluran ControlPlaneRevision dengan hal berikut:
|
|
Saluran tidak boleh dihilangkan atau kosong | Channel adalah kolom wajib diisi di ControlPlaneRevision. Kolom ini tidak ada atau kosong di resource kustom. |
|
Jenis revisi bidang kontrol tidak didukung: ${TYPE} | managed_service adalah satu-satunya kolom yang diizinkan untuk kolom ControlPlaneRevisionType. |
|
Versi Kubernetes tidak didukung: ${VERSION} | Kubernetes versi 1.15+ didukung. | |
Workload Identity tidak diaktifkan | Aktifkan workload identity di cluster Anda. | |
Kumpulan beban kerja tidak didukung: ${POOL} | Kumpulan beban kerja harus dalam bentuk ${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" berisi webhook dengan URL ${EXISTING_URL}, tetapi diharapkan ${EXPECTED_URL} | Google tidak akan menimpa webhook yang ada untuk menghindari kerusakan penginstalan Anda. Perbarui secara manual jika perilaku ini diinginkan. | |
ValidatingWebhookConfiguration ${NAME} berisi webhook dengan URL ${EXISTING_URL}, tetapi diharapkan ${EXPECTED_URL} | Google tidak akan menimpa webhook yang ada untuk menghindari kerusakan penginstalan Anda. Perbarui secara manual jika perilaku ini diinginkan. |
Cloud Service Mesh Terkelola tidak dapat terhubung ke cluster GKE
Antara Juni 2022 dan September 2022, Google menyelesaikan pekerjaan keamanan terkait Jaringan Resmi, Cloud Run, dan fungsi 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 sidecar 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:
Aktifkan
connectgateway
API yang diperlukan:gcloud services enable connectgateway.googleapis.com --project=[*PROJECT_ID*]
Lakukan mulai ulang berkelanjutan pada beban kerja.
Google Cloud API tidak diaktifkan
Jika fleet Cloud Service Mesh terkelola Anda menggunakan TRAFFIC_DIRECTOR
implementasi bidang kontrol,
API tertentu harus diaktifkan.
Aktifkan semua API yang diperlukan, termasuk yang tercantum sebagai "Dapat Dinonaktifkan" saat tidak menggunakan Cloud Service Mesh terkelola.
gcloud services enable --project=[*PROJECT_ID*] \ trafficdirector.googleapis.com \ networkservices.googleapis.com \ networksecurity.googleapis.com
Pastikan Anda tidak memiliki alat otomatis yang akan mengembalikan perubahan ini. Jika error terulang, perbarui konfigurasi atau daftar yang diizinkan yang relevan.
Workload Identity Federation 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
langganan 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 mengaktifkan Workload Identity Federation di semua kumpulan node cluster tersebut, karena ini adalah prasyarat untuk penginstalan Cloud Service Mesh.
Untuk mengatasi pesan error ini, Anda harus mengikuti petunjuk untuk Mengaktifkan Workload Identity Federation di semua node pool. Perhatikan bahwa pengaktifan dapat bervariasi bergantung pada kasus cluster tertentu Anda.
Setelah diaktifkan, pesan error akan otomatis dihapus dan cluster Anda akan kembali ke status ACTIVE
. Jika masalah berlanjut dan Anda memerlukan bantuan tambahan, lihat Mendapatkan dukungan.