Memecahkan masalah konfigurasi
Bagian ini menjelaskan masalah umum Cloud Service Mesh dan cara mengatasinya. Jika Anda memerlukan bantuan tambahan, lihat Mendapatkan dukungan.
Memeriksa MembershipState
Anda dapat memeriksa status mesh terbaru kapan saja dengan menjalankan perintah berikut:
gcloud container fleet mesh describe
Outputnya mirip dengan:
...
membershipSpecs:
projects/project_id/locations/global/memberships/cluster:
mesh:
management: MANAGEMENT_AUTOMATIC
membershipStates:
projects/project_id/locations/global/memberships/cluster:
servicemesh:
...
conditions:
- code: CONFIG_VALIDATION_WARNING
documentationLink: https://cloud.google.com/...
details: Application of one or more configs has failed. Error details are shown on individual config resources. See documentation link for more detail.
severity: WARNING
...
Kode Error MembershipState
Jika Cloud Service Mesh melaporkan kondisi ke MembershipState untuk cluster, hal ini dapat berarti bahwa konfigurasi Mesh (seperti Istio Custom Resources) tidak dapat diterapkan. Deskripsi kode error berikut memberikan informasi selengkapnya tentang cara mengatasinya.
| Kode Error | Penyebab | Resolusi |
|---|---|---|
CONFIG_APPLY_INTERNAL_ERROR |
Satu atau beberapa konfigurasi gagal diterapkan karena error internal. | Hubungi dukungan pelanggan. |
QUOTA_EXCEEDED_* |
Satu atau beberapa konfigurasi gagal diterapkan karena resource mencapai batas kuota. | Lihat Kuota untuk mengetahui informasi tentang kuota tertentu dan cara menaikkannya. |
CONFIG_VALIDATION_ERROR |
Satu atau beberapa konfigurasi gagal diterapkan karena konfigurasi tidak valid. Untuk Istio CR, konfigurasi yang tidak valid akan dihapus sepenuhnya dari terjemahan. | Error tertentu ditulis ke konfigurasi yang menyebabkannya. Informasi selengkapnya tentang cara mendiagnosisnya dijelaskan di bagian: Error Validasi Konfigurasi. |
CONFIG_VALIDATION_WARNING |
Kami menemukan potensi masalah dalam satu atau beberapa konfigurasi. Untuk Istio CR, kolom tertentu yang tidak valid akan diabaikan, tetapi konfigurasi keseluruhan akan diproses. Mungkin ada perilaku yang tidak diinginkan. | Informasi selengkapnya tentang cara mendiagnosisnya dijelaskan di bagian: Error Validasi Konfigurasi. |
MULTICLUSTER_SECRET_WARNING |
Cluster menggunakan secret multi-cluster Istio yang dibuat secara manual, bukan menggunakan multi-cluster API deklaratif untuk penemuan endpoint. | Pindahkan penyiapan penemuan endpoint multi-cluster ke implementasi deklaratif. Informasi selengkapnya dapat dilihat di halaman Multi-cluster Secrets. |
WORKLOAD_IDENTITY_REQUIRED |
Workload identity tidak diaktifkan untuk cluster atau setidaknya salah satu node pool. | Aktifkan workload identity di tingkat cluster dan node pool. Untuk mengetahui petunjuknya, lihat halaman Mengaktifkan workload identity. |
MANAGED_CNI_NOT_ENABLED |
Managed CNI tidak diaktifkan untuk cluster ini. | Aktifkan Managed CNI untuk mempertahankan praktik terbaik dalam mesh Anda. Informasi selengkapnya dapat dilihat di halaman Mengaktifkan Managed CNI. |
NON_STANDARD_SIDECAR_BINARY_USAGE |
Satu atau beberapa perintah dalam container Istio menggunakan biner selain `envoy`, `pilot_agent`, atau `iptables`. | Hapus dependensi pada biner yang tidak didukung. Informasi selengkapnya dapat dilihat di halaman Penggunaan biner yang tidak didukung. |
UNSUPPORTED_GATEWAY_CLASS_USAGE |
Cluster dikonfigurasi dengan class gateway (Istio dan Anthos Service Mesh) yang memerlukan migrasi ke Istio Ingress Gateway agar selaras dengan praktik terbaik. | Lihat dokumentasi untuk mengetahui petunjuk mendetail |
UNSUPPORTED_MULTIPLE_CONTROL_PLANES |
Cluster telah menyediakan beberapa saluran bidang kontrol. Cloud Service Mesh hanya mendukung satu saluran per cluster. | Untuk mengetahui informasi selengkapnya, lihat Memperbaiki beberapa control plane. |
REQUIRED_ORG_POLICY_DISABLED |
Kebijakan organisasi yang dinonaktifkan harus diaktifkan. | Nonaktifkan kebijakan ini untuk project guna memastikan fungsi Cloud Service Mesh. Untuk mengetahui informasi selengkapnya, lihat Mengaktifkan Kebijakan Organisasi yang Diperlukan. |
MISSING_CONTROL_PLANE_CONFIG |
Cluster tidak memiliki konfigurasi untuk Cloud Service Mesh. | Ikuti petunjuk dalam Konfigurasi Control Plane yang Tidak Ada dokumentasi untuk membuat konfigurasi ini. Mesh layanan Anda masih berfungsi, tetapi memerlukan update. |
Error Validasi Konfigurasi
Kode CONFIG_VALIDATION_WARNING dan CONFIG_VALIDATION_ERROR
menunjukkan bahwa masalah ditemukan pada konfigurasi mesh (Istio atau Kubernetes
Custom Resources) dan bahwa sebagian konfigurasi mungkin tidak diterapkan dengan benar.
Perilaku Validasi Konfigurasi
Cloud Service Mesh menggunakan proses validasi konfigurasi dua tingkat:
- Validasi Sinkron: Validating Webhook melakukan pemeriksaan sintaksis awal. Jika konfigurasi pada dasarnya salah format, update akan ditolak di lapisan Kubernetes API dan
kubectl applyakan langsung gagal. - Validasi Asinkron: Verifikasi semantik terjadi di latar belakang selama terjemahan. Jika fase ini mendeteksi konfigurasi yang tidak valid, sistem akan secara asinkron menghapus Custom Resource (CR) untuk mencegahnya merusak mesh lainnya sambil terus menerapkan konfigurasi yang valid.
Untuk lebih memahami perilaku ini, tinjau bagian Memahami Validasi Konfigurasi.
Menemukan Konfigurasi yang Tidak Valid
Karena Custom Resources yang tidak valid dihapus secara asinkron, Anda harus memeriksa statusnya secara aktif. Banyak detail error per resource ditulis kembali ke kolom status resource yang berlaku dan ditampilkan di Fleet Feature State.
Perintah berikut dapat digunakan untuk menemukan konfigurasi yang tidak valid dan melihat pesan error tertentu. (Catatan: perintah ini khusus untuk resource Istio, dan tidak semua error validasi dapat ditampilkan di sini).
for resource in serviceentries destinationrules virtualservices gateways peerauthentications authorizationpolicies requestauthentications sidecars telemetries envoyfilters;
do kubectl get $resource --all-namespaces --output=json | \
jq '.items[] | select(.status.conditions != null and any(.status.conditions[]; .type == "Accepted" and .status == "False")) | {"name": .metadata.name, "namespace": .metadata.namespace, "kind": .kind, "conditions": .status.conditions}';
done
Outputnya mirip dengan:
{
"name": "demo-envoy-filter",
"namespace": "default",
"kind": "EnvoyFilter",
"conditions": [
{
"lastTransitionTime": "2024-04-04T21:10:18.046975988Z",
"message": "This API is not supported",
"reason": "Invalid",
"status": "False",
"type": "Accepted"
}
]
}