Menyediakan bidang kontrol Cloud Service Mesh terkelola di GKE
Cloud Service Mesh adalah mesh layanan yang dikelola Google yang dapat Anda aktifkan dengan mudah. Google menangani keandalan, upgrade, penskalaan, dan keamanan untuk Anda.
Halaman ini menunjukkan cara menggunakan fleet API untuk menyiapkan Cloud Service Mesh terkelola menggunakan Istio API.
Prasyarat
Sebagai titik awal, panduan ini mengasumsikan bahwa Anda memiliki:
- Project Cloud
- Akun Penagihan Cloud
- Mendapatkan izin yang diperlukan untuk menyediakan Cloud Service Mesh
- Mengaktifkan Workload Identity di cluster dan node pool Anda.
Persyaratan
- Satu atau beberapa cluster dengan versi GKE yang didukung, di salah satu region yang didukung.
Perhatikan bahwa Cloud Service Mesh terkelola menggunakan saluran rilis GKE untuk menyeimbangkan stabilitas dan kecepatan upgrade. Perubahan baru pada komponen dalam cluster Cloud Service Mesh (termasuk CNI, MDPC, proxy, dan CRD Istio) akan diluncurkan ke cluster yang berlangganan saluran cepat GKE terlebih dahulu. Kemudian, versi tersebut akan dipromosikan ke saluran reguler GKE, dan akhirnya saluran stabil GKE, setelah menunjukkan stabilitas yang memadai.
- Cloud Service Mesh Terkelola tidak mendukung perubahan saluran rilis GKE dengan aman.
- Jika Anda mengubah saluran rilis GKE, Cloud Service Mesh akan otomatis mengupgrade/mendowngrade komponen dalam cluster (CNI, MDPC, versi proxy yang dimasukkan secara default, dan CRD Istio) agar selaras dengan saluran rilis GKE saat ini.
Pastikan cluster Anda memiliki kapasitas yang cukup untuk komponen yang diperlukan yang diinstal Cloud Service Mesh terkelola di cluster.
- Deployment
mdp-controller
di namespacekube-system
meminta CPU: 50 m, memori: 128 Mi. - DaemonSet
istio-cni-node
di namespacekube-system
meminta CPU: 100 m, memori: 100 Mi di setiap node.
- Deployment
Pastikan kebijakan organisasi
constraints/compute.disableInternetNetworkEndpointGroup
dinonaktifkan. Jika kebijakan diaktifkan, ServiceEntry mungkin tidak berfungsi.Pastikan mesin klien yang Anda gunakan untuk menyediakan Cloud Service Mesh terkelola memiliki konektivitas jaringan ke server API.
Cluster Anda harus terdaftar ke fleet. Hal ini disertakan dalam petunjuk, atau dapat dilakukan secara terpisah sebelum penyediaan.
Project Anda harus mengaktifkan fitur fleet Service Mesh. Tindakan ini disertakan dalam petunjuk atau dapat dilakukan secara terpisah.
GKE Autopilot hanya didukung dengan GKE versi 1.21.3+.
Cloud Service Mesh dapat menggunakan beberapa cluster GKE dalam lingkungan satu jaringan satu project atau lingkungan satu jaringan multi-project.
- Jika Anda bergabung ke cluster yang tidak berada dalam project yang sama, cluster tersebut harus terdaftar ke project host fleet yang sama, dan cluster tersebut harus berada dalam konfigurasi VPC bersama bersama-sama di jaringan yang sama.
- Untuk lingkungan multi-cluster satu project, project fleet dapat sama dengan project cluster. Untuk informasi selengkapnya tentang fleet, lihat Ringkasan Fleet.
- Untuk lingkungan multi-project, sebaiknya Anda menghosting fleet di project terpisah dari project cluster. Jika kebijakan organisasi dan konfigurasi yang ada mengizinkannya, sebaiknya gunakan project VPC bersama sebagai project host fleet. Untuk informasi selengkapnya, lihat Menyiapkan cluster dengan VPC Bersama.
Peran yang diperlukan untuk menginstal Cloud Service Mesh
Tabel berikut menjelaskan peran yang diperlukan untuk menginstal Cloud Service Mesh terkelola.
Nama peran | ID Peran | Lokasi pemberian | Deskripsi |
---|---|---|---|
GKE Hub Admin | roles/gkehub.admin | Project fleet | Akses penuh ke GKE Hubs dan resource terkait. |
Service Usage Admin | roles/serviceusage.serviceUsageAdmin | Project fleet | Kemampuan untuk mengaktifkan, menonaktifkan, dan memeriksa status layanan, memeriksa operasi, serta menggunakan kuota dan penagihan untuk project konsumen. (Catatan 1) |
CA Service Admin Beta | roles/privateca.admin | Project fleet | Akses penuh ke semua resource CA Service. (Catatan 2) |
Batasan
Sebaiknya tinjau daftar fitur dan batasan yang didukung Cloud Service Mesh. Secara khusus, perhatikan hal berikut:
IstioOperator
API tidak didukung karena tujuan utamanya adalah untuk mengontrol komponen dalam cluster.Penggunaan Certificate Authority Service (Layanan CA) memerlukan konfigurasi Cloud Service Mesh per cluster, dan tidak didukung saat menggunakan konfigurasi default armada di GKE Enterprise.
Untuk cluster GKE Autopilot, penyiapan lintas project hanya didukung dengan GKE 1.23 atau yang lebih baru.
Untuk cluster GKE Autopilot, agar dapat beradaptasi dengan batas resource GKE Autopilot, permintaan dan batas resource proxy default ditetapkan ke CPU 500 m dan memori 512 Mb. Anda dapat mengganti nilai default menggunakan injeksi kustom.
Selama proses penyediaan untuk bidang kontrol terkelola, CRD Istio disediakan di cluster yang ditentukan. Jika ada CRD Istio yang ada di cluster, CRD tersebut akan ditimpa.
Istio CNI dan Cloud Service Mesh tidak kompatibel dengan GKE Sandbox. Oleh karena itu, Cloud Service Mesh terkelola dengan penerapan
TRAFFIC_DIRECTOR
tidak mendukung cluster dengan GKE Sandbox yang diaktifkan.
Sebelum memulai
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
- Konfigurasikan
gcloud
(meskipun Anda menggunakan Cloud Shell). -
Lakukan autentikasi dengan Google Cloud CLI, dengan FLEET_PROJECT_ID adalah ID project Host Flotte Anda. Secara umum, FLEET_PROJECT_ID dibuat secara default dan memiliki nama yang sama
dengan project.
gcloud auth login --project FLEET_PROJECT_ID
- Perbarui komponen:
gcloud components update
-
Aktifkan API yang diperlukan di project host fleet Anda.
gcloud services enable mesh.googleapis.com \ --project=FLEET_PROJECT_ID
Di konsol Google Cloud, buka halaman Feature Manager.
Di panel Service Mesh, klik Configure.
Tinjau setelan yang diwarisi oleh semua cluster baru yang Anda buat di konsol Google Cloud dan daftarkan ke fleet.
Untuk menerapkan setelan ini, klik Konfigurasikan.
Pada dialog konfirmasi, klik Confirm.
Opsional: Sinkronkan cluster yang ada ke setelan default:
- Di daftar Clusters in the fleet, pilih cluster yang ingin Anda sinkronkan. Anda hanya dapat memilih cluster yang telah menginstal Cloud Service Mesh.
- Klik Sinkronkan ke setelan armada, lalu klik Konfirmasi di dialog konfirmasi yang muncul. Operasi ini dapat memerlukan waktu beberapa menit untuk selesai.
Setelan tingkat perangkat
Buat file
mesh.yaml
yang hanya berisi satu barismanagement: automatic
:echo "management: automatic" > mesh.yaml
Aktifkan Cloud Service Mesh untuk fleet Anda:
gcloud container fleet mesh enable --project FLEET_PROJECT_ID \ --fleet-default-member-config mesh.yaml
Jika Anda melihat error berikut, Anda harus mengaktifkan GKE Enterprise.
ERROR: (gcloud.container.fleet.mesh.enable) FAILED_PRECONDITION: The [anthos.googleapis.com] service is required for this operation and is not enabled for the project [PROJECT_NUMBER]. Please use the Google Developers Console to enable it.: failed precondition
Setelan tingkat jaringan
Jika project jaringan Anda berbeda dengan project host fleet (misalnya, Anda menggunakan VPC bersama), Anda harus mengizinkan akun layanan Cloud Service Mesh di project fleet untuk mengakses project jaringan. Anda hanya perlu melakukan ini sekali untuk project jaringan.
Berikan izin akun layanan di project fleet untuk mengakses project jaringan:
gcloud projects add-iam-policy-binding "NETWORK_PROJECT_ID" \ --member "serviceAccount:service-FLEET_PROJECT_NUMBER@gcp-sa-servicemesh.iam.gserviceaccount.com" \ --role roles/anthosservicemesh.serviceAgent
Setelan tingkat cluster
Jika Anda siap membuat cluster untuk digunakan dengan Cloud Service Mesh, buat dan daftarkan dalam satu langkah dengan Google Cloud CLI untuk menggunakan konfigurasi default. Contoh:
gcloud container clusters create-auto CLUSTER_NAME \ --fleet-project FLEET_PROJECT_ID \ --location=LOCATION
Anda bisa mendapatkan nomor project untuk project fleet dengan menjalankan perintah berikut:
gcloud projects list --filter="FLEET_PROJECT_ID" --format="value(PROJECT_ID)"
Flag
--location
adalah zona atau region komputasi (sepertius-central1-a
atauus-central1
) untuk cluster.Jika project cluster berbeda dengan project host fleet, Anda harus mengizinkan akun layanan Cloud Service Mesh di project fleet untuk mengakses project cluster, dan mengaktifkan API yang diperlukan di project cluster. Anda hanya perlu melakukannya sekali untuk setiap project cluster.
Berikan izin akun layanan di project fleet untuk mengakses project cluster:
gcloud projects add-iam-policy-binding "CLUSTER_PROJECT_ID" \ --member "serviceAccount:service-FLEET_PROJECT_NUMBER@gcp-sa-servicemesh.iam.gserviceaccount.com" \ --role roles/anthosservicemesh.serviceAgent
Aktifkan Mesh API di project cluster:
gcloud services enable mesh.googleapis.com \ --project=CLUSTER_PROJECT_ID
Ganti CLUSTER_PROJECT_ID dengan ID unik project cluster Anda. Jika Anda membuat cluster dalam project yang sama dengan fleet, CLUSTER_PROJECT_ID akan sama dengan FLEET_PROJECT_ID.
Mendaftarkan cluster GKE menggunakan identitas workload fleet. Flag
--location
adalah zona atau region compute (sepertius-central1-a
atauus-central1
) untuk cluster.gcloud container clusters update CLUSTER_NAME \ --location CLUSTER_LOCATION \ --fleet-project FLEET_PROJECT_ID
Pastikan cluster Anda terdaftar:
gcloud container fleet memberships list --project FLEET_PROJECT_ID
Contoh output:
NAME EXTERNAL_ID LOCATION cluster-1 1d8e255d-2b55-4df9-8793-0435461a2cbc us-central1
Catat MEMBERSHIP_NAME, karena Anda akan memerlukannya saat mengaktifkan pengelolaan otomatis.
Jika project jaringan cluster Anda berbeda dengan project host fleet (misalnya, Anda menggunakan VPC bersama), Anda harus mengizinkan akun layanan Cloud Service Mesh di project fleet untuk mengakses project jaringan. Anda hanya perlu melakukan ini sekali untuk project jaringan.
Berikan izin akun layanan di project fleet untuk mengakses project jaringan:
gcloud projects add-iam-policy-binding "NETWORK_PROJECT_ID" \ --member "serviceAccount:service-FLEET_PROJECT_NUMBER@gcp-sa-servicemesh.iam.gserviceaccount.com" \ --role roles/anthosservicemesh.serviceAgent
Jika project cluster berbeda dengan project host fleet, Anda harus mengizinkan akun layanan Cloud Service Mesh di project fleet untuk mengakses project cluster, dan mengaktifkan API yang diperlukan di project cluster.
Anda hanya perlu melakukannya sekali untuk setiap project cluster. Jika sebelumnya Anda telah mengonfigurasi Cloud Service Mesh terkelola untuk kombinasi project cluster dan fleet ini, perubahan ini telah diterapkan dan Anda tidak perlu menjalankan perintah berikut.
Berikan izin akun layanan di project fleet untuk mengakses project cluster:
gcloud projects add-iam-policy-binding "CLUSTER_PROJECT_ID" \ --member "serviceAccount:service-FLEET_PROJECT_NUMBER@gcp-sa-servicemesh.iam.gserviceaccount.com" \ --role roles/anthosservicemesh.serviceAgent
Aktifkan Mesh API di project cluster:
gcloud services enable mesh.googleapis.com \ --project=CLUSTER_PROJECT_ID
- MEMBERSHIP_NAME adalah nama keanggotaan yang tercantum saat Anda memverifikasi bahwa cluster Anda terdaftar ke fleet.
MEMBERSHIP_LOCATION adalah lokasi langganan Anda (wilayah, atau
global
).Jika Anda baru-baru ini membuat langganan menggunakan perintah dalam panduan ini, ini harus merupakan region cluster Anda. Jika Anda memiliki cluster zona, gunakan region yang sesuai dengan zona cluster. Misalnya, jika Anda memiliki cluster zonal di
us-central1-c
, gunakan nilaius-central1
.Nilai ini mungkin
global
jika Anda mendaftar sebelum Mei 2023, atau jika Anda menentukan lokasiglobal
saat mendaftar langganan. Anda dapat memeriksa lokasi langganan dengangcloud container fleet memberships list --project FLEET_PROJECT_ID
.- Pod yang tidak diinjeksi
- Pod yang dimasukkan secara manual
- Pekerjaan
- StatefulSet
- DaemonSet
Buka halaman Komunikasi.
Di baris Cloud Service Mesh Upgrade, pada kolom Email, pilih tombol pilihan untuk mengaktifkan notifikasi pemeliharaan AKTIF.
- Terapkan label injeksi default ke namespace:
Jalankan perintah berikut untuk menemukan saluran rilis yang tersedia:
kubectl -n istio-system get controlplanerevision
Outputnya mirip dengan hal berikut ini:
NAME AGE asm-managed-rapid 6d7h
CATATAN: Jika dua revisi bidang kontrol muncul dalam daftar di atas, hapus salah satunya. Memiliki beberapa saluran bidang kontrol di cluster tidak didukung.
Dalam output, nilai di kolom
NAME
adalah label revisi yang sesuai dengan saluran rilis yang tersedia untuk versi Cloud Service Mesh.Terapkan label revisi ke namespace:
kubectl label namespace NAMESPACE \ istio-injection- istio.io/rev=REVISION_LABEL --overwrite
- Kubernetes mewajibkan kolom
image
ditetapkan sebelum injeksi dijalankan. Meskipun Anda dapat menetapkan gambar tertentu untuk mengganti gambar default, sebaiknya tetapkanimage
keauto
, yang akan menyebabkan injector sidecar otomatis memilih gambar yang akan digunakan. - Beberapa kolom di
containers
bergantung pada setelan terkait. Misalnya, harus kurang dari atau sama dengan batas CPU. Jika kedua kolom tidak dikonfigurasi dengan benar, pod mungkin gagal dimulai. - Kubernetes dapat Anda gunakan untuk menetapkan
requests
danlimits
untuk resource dispec
Pod. GKE Autopilot hanya mempertimbangkanrequests
. Untuk mengetahui informasi selengkapnya, lihat Menetapkan batas resource di Autopilot. - Untuk GKE Standard, jika
sidecar.istio.io/proxyCPU
ditetapkan, pastikan untuk menetapkansidecar.istio.io/proxyCPULimit
secara eksplisit. Jika tidak, batas CPU sidecar akan ditetapkan sebagai tidak terbatas. - Untuk GKE Standard, jika
sidecar.istio.io/proxyMemory
ditetapkan, pastikan untuk menetapkansidecar.istio.io/proxyMemoryLimit
secara eksplisit. Jika tidak, batas memori sidecar akan ditetapkan sebagai tidak terbatas. - Untuk GKE Autopilot, mengonfigurasi resource
requests
danlimits
menggunakan anotasi dapat menyebabkan penyediaan resource yang berlebihan. Gunakan pendekatan template gambar untuk menghindari. Lihat Contoh modifikasi resource di Autopilot. - Ganti label namespace saat ini. Langkah-langkahnya bergantung pada implementasi bidang kontrol Anda.
- Terapkan label injeksi default ke namespace:
Jalankan perintah berikut untuk menemukan saluran rilis yang tersedia:
kubectl -n istio-system get controlplanerevision
Outputnya mirip dengan hal berikut ini:
NAME AGE asm-managed-rapid 6d7h
CATATAN: Jika dua revisi bidang kontrol muncul dalam daftar di atas, hapus salah satunya. Memiliki beberapa saluran bidang kontrol di cluster tidak didukung.
Dalam output, nilai di kolom
NAME
adalah label revisi yang sesuai dengan saluran rilis yang tersedia untuk versi Cloud Service Mesh.Terapkan label revisi ke namespace:
kubectl label namespace NAMESPACE \ istio-injection- istio.io/rev=REVISION_LABEL --overwrite
Lakukan upgrade berkelanjutan deployment di namespace:
kubectl rollout restart deployment -n NAMESPACE
Uji aplikasi Anda untuk memverifikasi bahwa workload berfungsi dengan benar.
Jika Anda memiliki workload di namespace lain, ulangi langkah-langkah sebelumnya untuk setiap namespace.
Jika Anda men-deploy aplikasi dalam penyiapan multi-cluster, replikasikan konfigurasi Kubernetes dan Istio di semua cluster, kecuali jika ada keinginan untuk membatasi konfigurasi tersebut hanya ke sebagian cluster. Konfigurasi yang diterapkan ke cluster tertentu adalah sumber tepercaya untuk cluster tersebut.
Perbarui beban kerja yang akan dimasukkan dengan versi control plane sebelumnya. Dalam perintah berikut, nilai revisi
asm-191-1
hanya digunakan sebagai contoh. Ganti nilai contoh dengan label revisi dari platform kontrol sebelumnya.kubectl label namespace NAMESPACE istio-injection- istio.io/rev=asm-191-1 --overwrite
Mulai ulang Pod untuk memicu injeksi ulang sehingga proxy memiliki versi sebelumnya:
kubectl rollout restart deployment -n NAMESPACE
Mengaktifkan mesh.googleapis.com akan mengaktifkan API berikut:
API | Tujuan | Dapat Dinonaktifkan |
---|---|---|
meshconfig.googleapis.com |
Cloud Service Mesh menggunakan Mesh Configuration API untuk meneruskan data konfigurasi dari mesh Anda ke Google Cloud. Selain itu, mengaktifkan Mesh Configuration API memungkinkan Anda mengakses halaman Cloud Service Mesh di konsol Google Cloud dan menggunakan otoritas sertifikasi Cloud Service Mesh. | Tidak |
meshca.googleapis.com |
Terkait dengan Certificate Authority Cloud Service Mesh yang digunakan oleh Cloud Service Mesh terkelola. | Tidak |
container.googleapis.com |
Diperlukan untuk membuat cluster Google Kubernetes Engine (GKE). | Tidak |
gkehub.googleapis.com |
Diperlukan untuk mengelola mesh sebagai armada. | Tidak |
monitoring.googleapis.com |
Diperlukan untuk mengambil telemetri untuk beban kerja mesh. | Tidak |
stackdriver.googleapis.com |
Diperlukan untuk menggunakan UI Layanan. | Tidak |
opsconfigmonitoring.googleapis.com |
Diperlukan untuk menggunakan UI Layanan untuk cluster di luar Google Cloud. | Tidak |
connectgateway.googleapis.com |
Diperlukan agar bidang kontrol Cloud Service Mesh terkelola dapat mengakses workload mesh. | Ya* |
trafficdirector.googleapis.com |
Mengaktifkan bidang kontrol terkelola yang sangat tersedia dan skalabel. | Ya* |
networkservices.googleapis.com |
Mengaktifkan bidang kontrol terkelola yang sangat tersedia dan skalabel. | Ya* |
networksecurity.googleapis.com |
Mengaktifkan bidang kontrol terkelola yang sangat tersedia dan skalabel. | Ya* |
Mengonfigurasi Cloud Service Mesh terkelola
Langkah-langkah yang diperlukan untuk menyediakan Cloud Service Mesh terkelola menggunakan fleet API bergantung pada apakah Anda lebih memilih untuk mengaktifkan secara default untuk cluster fleet baru atau mengaktifkannya per cluster.
Mengonfigurasi untuk fleet Anda
Jika telah mengaktifkan edisi Enterprise Google Kubernetes Engine (GKE), Anda dapat mengaktifkan Cloud Service Mesh terkelola sebagai konfigurasi default untuk fleet Anda. Artinya, setiap GKE baru di cluster Google Cloud yang terdaftar selama pembuatan cluster akan mengaktifkan Cloud Service Mesh terkelola di cluster. Anda dapat mengetahui lebih lanjut konfigurasi default fleet di Mengelola fitur tingkat fleet.
Mengaktifkan Cloud Service Mesh terkelola sebagai konfigurasi default untuk fleet Anda dan mendaftarkan cluster ke fleet selama pembuatan cluster hanya mendukung Mesh CA. Jika Anda ingin menggunakan Layanan Otoritas Sertifikasi, sebaiknya aktifkan per cluster.
Untuk mengaktifkan setelan default tingkat fleet untuk Cloud Service Mesh terkelola, selesaikan langkah-langkah berikut:
Konsol
gcloud
Untuk mengonfigurasi setelan default tingkat fleet menggunakan Google Cloud CLI, Anda harus menetapkan setelan berikut:
Lanjutkan ke Memverifikasi bahwa bidang kontrol telah disediakan.
Mengonfigurasi per cluster
Gunakan langkah-langkah berikut untuk mengonfigurasi Cloud Service Mesh terkelola untuk setiap cluster di mesh Anda satu per satu.
Mengaktifkan fitur fleet Cloud Service Mesh
Aktifkan Cloud Service Mesh di project fleet. Perhatikan bahwa jika Anda berencana untuk mendaftarkan beberapa cluster, pengaktifan Cloud Service Mesh akan dilakukan di tingkat fleet sehingga Anda hanya perlu menjalankan perintah ini satu kali.
gcloud container fleet mesh enable --project FLEET_PROJECT_ID
Mendaftarkan cluster ke fleet
Mengonfigurasi Certificate Authority Service (Opsional)
Jika deployment mesh layanan Anda memerlukan Layanan Certificate Authority (Layanan CA), ikuti Mengonfigurasi Layanan Certificate Authority untuk Cloud Service Mesh terkelola untuk mengaktifkannya bagi fleet Anda. Pastikan untuk menyelesaikan semua langkah sebelum melanjutkan ke bagian berikutnya.
Mengaktifkan pengelolaan otomatis
Jalankan perintah berikut untuk mengaktifkan pengelolaan otomatis:
gcloud container fleet mesh update \
--management automatic \
--memberships MEMBERSHIP_NAME \
--project FLEET_PROJECT_ID \
--location MEMBERSHIP_LOCATION
dengan:
Memverifikasi bahwa bidang kontrol telah disediakan
Setelah beberapa menit, verifikasi bahwa status bidang kontrol adalah ACTIVE
:
gcloud container fleet mesh describe --project FLEET_PROJECT_ID
Outputnya mirip dengan:
...
membershipSpecs:
projects/746296320118/locations/us-central1/memberships/demo-cluster-1:
mesh:
management: MANAGEMENT_AUTOMATIC
membershipStates:
projects/746296320118/locations/us-central1/memberships/demo-cluster-1:
servicemesh:
controlPlaneManagement:
details:
- code: REVISION_READY
details: 'Ready: asm-managed'
state: ACTIVE
implementation: ISTIOD | TRAFFIC_DIRECTOR
dataPlaneManagement:
details:
- code: OK
details: Service is running.
state: ACTIVE
state:
code: OK
description: 'Revision(s) ready for use: asm-managed.'
...
Perhatikan bidang kontrol yang ditampilkan di kolom implementation
, baik
ISTIOD
maupun TRAFFIC_DIRECTOR
. Lihat
Fitur yang didukung Cloud Service Mesh
untuk mengetahui perbedaan bidang kontrol dan konfigurasi yang didukung, serta cara
penerapan bidang kontrol dipilih.
Konfigurasi kubectl
untuk mengarah ke cluster
Bagian berikut melibatkan perintah kubectl
yang dijalankan pada setiap cluster Anda. Sebelum melanjutkan ke bagian berikut, jalankan perintah berikut untuk setiap cluster Anda guna mengonfigurasi kubectl
agar mengarah ke cluster.
gcloud container clusters get-credentials CLUSTER_NAME \
--location CLUSTER_LOCATION \
--project CLUSTER_PROJECT_ID
Perhatikan bahwa gateway masuk tidak otomatis di-deploy dengan kontrol plane. Dengan memisahkan deployment gateway ingress dan bidang kontrol, Anda dapat mengelola gateway di lingkungan produksi. Jika Anda ingin menggunakan gateway masuk Istio atau gateway keluar, lihat Men-deploy gateway. Jika Anda ingin menggunakan Kubernetes Gateway API, lihat Menyiapkan Gateway untuk Mesh. Untuk mengaktifkan fitur opsional lainnya, lihat Mengaktifkan fitur opsional di Cloud Service Mesh.
Bidang data terkelola
Jika Anda menggunakan Cloud Service Mesh terkelola, Google akan sepenuhnya mengelola upgrade proxy Anda.
Dengan mengaktifkan fitur bidang data terkelola, proxy sidecar dan gateway yang dimasukkan akan diperbarui secara aktif dan otomatis bersama dengan bidang kontrol terkelola dengan memulai ulang beban kerja untuk memasukkan kembali versi baru proxy. Proses ini dimulai setelah control plane diupgrade dan biasanya selesai dalam waktu 2 minggu setelah dimulai.
Perhatikan bahwa data plane terkelola bergantung pada saluran rilis GKE. Jika Anda mengubah saluran rilis GKE saat platform data terkelola diaktifkan, Cloud Service Mesh terkelola akan memperbarui proxy dari semua workload yang ada seperti peluncuran platform data terkelola.
Jika dinonaktifkan, pengelolaan proxy dilakukan secara pasif - didorong oleh siklus proses alami pod di cluster dan harus dipicu secara manual oleh pengguna untuk mengontrol kecepatan update.
Bidang data terkelola mengupgrade proxy dengan mengeluarkan pod yang menjalankan proxy versi sebelumnya. Pengusiran dilakukan secara bertahap, dengan mematuhi anggaran gangguan pod dan mengontrol kecepatan perubahan.
Bidang data terkelola tidak mengelola hal berikut:
Menonaktifkan bidang data terkelola (opsional)
Jika menyediakan Cloud Service Mesh terkelola di cluster baru, Anda dapat menonaktifkan sepenuhnya bidang data terkelola, atau untuk setiap namespace atau pod. Data plane terkelola akan terus dinonaktifkan untuk cluster yang ada jika dinonaktifkan secara default atau manual.
Untuk menonaktifkan bidang data terkelola di tingkat cluster dan kembali ke pengelolaan proxy sidecar sendiri, ubah anotasi:
kubectl annotate --overwrite controlplanerevision -n istio-system \
mesh.cloud.google.com/proxy='{"managed":"false"}'
Untuk menonaktifkan bidang data terkelola untuk namespace:
kubectl annotate --overwrite namespace NAMESPACE \
mesh.cloud.google.com/proxy='{"managed":"false"}'
Untuk menonaktifkan bidang data terkelola untuk pod:
kubectl annotate --overwrite pod POD_NAME \
mesh.cloud.google.com/proxy='{"managed":"false"}'
Mengaktifkan notifikasi pemeliharaan
Anda dapat meminta untuk diberi tahu tentang pemeliharaan platform data terkelola mendatang hingga satu minggu sebelum pemeliharaan dijadwalkan. Notifikasi pemeliharaan tidak dikirim secara default. Anda juga harus Mengonfigurasi periode pemeliharaan GKE sebelum dapat menerima notifikasi. Jika diaktifkan, notifikasi akan dikirim setidaknya dua hari sebelum operasi upgrade.
Untuk memilih untuk menerima notifikasi pemeliharaan bidang data terkelola:
Setiap pengguna yang ingin menerima notifikasi harus mengaktifkannya secara terpisah. Jika Anda ingin menetapkan filter email untuk notifikasi ini, baris subjeknya adalah:
Upcoming upgrade for your Cloud Service Mesh cluster "CLUSTER_LOCATION/CLUSTER_NAME"
.
Contoh berikut menunjukkan notifikasi pemeliharaan bidang data terkelola yang umum:
Subject Line: Upgrade mendatang untuk cluster Cloud Service Mesh Anda "
<location/cluster-name>
"Pengguna Cloud Service Mesh yang terhormat,
Komponen Cloud Service Mesh di cluster Anda ${instance_id} (https://console.cloud.google.com/kubernetes/clusters/details/${instance_id}/details?project=${project_id}) dijadwalkan untuk diupgrade pada ${scheduled_date_human_readable} pukul ${scheduled_time_human_readable}.
Anda dapat memeriksa catatan rilis (https://cloud.google.com/service-mesh/docs/release-notes) untuk mempelajari update baru ini.
Jika pemeliharaan ini dibatalkan, Anda akan menerima pemberitahuan melalui email.
Hormat kami,
Tim Cloud Service Mesh
(c) 2023 Google LLC 1600 Amphitheater Parkway, Mountain View, CA 94043 Kami mengirim pengumuman ini untuk menginformasikan perubahan penting pada Google Cloud Platform atau akun Anda. Anda dapat memilih untuk tidak menerima notifikasi masa pemeliharaan dengan mengedit preferensi pengguna: https://console.cloud.google.com/user-preferences/communication?project=${project_id}
Mengonfigurasi penemuan endpoint (hanya untuk penginstalan multi-cluster)
Jika mesh Anda hanya memiliki satu cluster, lewati langkah-langkah multi-cluster ini dan lanjutkan ke Men-deploy aplikasi atau Memigrasikan aplikasi.
Sebelum melanjutkan, pastikan Cloud Service Mesh dikonfigurasi di setiap cluster.
Mengaktifkan Cloud Service Mesh dengan fleet API akan mengaktifkan penemuan endpoint untuk cluster ini. Namun, Anda harus membuka port firewall. Untuk menonaktifkan penemuan endpoint untuk satu atau beberapa cluster, lihat petunjuk untuk menonaktifkannya di Penemuan endpoint antar-cluster dengan API deklaratif.
Untuk contoh aplikasi dengan dua cluster, lihat contoh layanan HelloWorld.
Men-deploy aplikasi
Jika Anda memiliki lebih dari satu cluster dalam fleet yang menggunakan Cloud Service Mesh terkelola, pastikan penemuan endpoint atau port firewall dikonfigurasi seperti yang diinginkan sebelum melanjutkan dan men-deploy aplikasi.Aktifkan namespace untuk injeksi. Langkah-langkahnya bergantung pada implementasi bidang kontrol Anda.
Terkelola (TD)
kubectl label namespace NAMESPACE \
istio.io/rev- istio-injection=enabled --overwrite
Dikelola (Istiod)
Direkomendasikan: Jalankan perintah berikut untuk menerapkan label injeksi default ke namespace:
kubectl label namespace NAMESPACE \
istio.io/rev- istio-injection=enabled --overwrite
Jika Anda adalah pengguna lama dengan platform kontrol Istiod Terkelola: Sebaiknya gunakan injeksi default, tetapi injeksi berbasis revisi didukung. Gunakan petunjuk berikut:
Validasi bahwa label namespace diterapkan dengan benar menggunakan perintah berikut.
kubectl get namespace -L istio-injection
Contoh output:
NAME STATUS AGE ISTIO-INJECTION
default Active 5m9s enabled
Pada tahap ini, Anda telah berhasil mengonfigurasi Cloud Service Mesh terkelola. Jika Anda memiliki workload yang ada di namespace berlabel, mulai ulang agar proxy dimasukkan.
Jika Anda men-deploy aplikasi dalam penyiapan multi-cluster, replikasikan konfigurasi Kubernetes dan bidang kontrol di semua cluster, kecuali jika Anda berencana untuk membatasi konfigurasi tertentu tersebut ke sebagian cluster. Konfigurasi yang diterapkan ke cluster tertentu adalah sumber tepercaya untuk cluster tersebut.
Menyesuaikan injeksi (opsional)
Anda dapat mengganti nilai default dan menyesuaikan setelan injeksi, tetapi hal ini dapat menyebabkan error konfigurasi yang tidak terduga dan masalah yang dihasilkan dengan penampung sidecar. Sebelum menyesuaikan injeksi, baca informasi setelah contoh untuk mengetahui catatan tentang setelan dan rekomendasi tertentu.
Konfigurasi per pod tersedia untuk mengganti opsi ini di setiap pod.
Hal ini dilakukan dengan menambahkan penampung istio-proxy
ke pod Anda. Injeksi sidecar akan memperlakukan konfigurasi apa pun yang ditentukan di sini sebagai penggantian untuk template injeksi default.
Misalnya, konfigurasi berikut menyesuaikan berbagai setelan,
termasuk menurunkan permintaan CPU, menambahkan pemasangan volume, dan menambahkan hook preStop
:
apiVersion: v1
kind: Pod
metadata:
name: example
spec:
containers:
- name: hello
image: alpine
- name: istio-proxy
image: auto
resources:
requests:
cpu: "200m"
memory: "256Mi"
limits:
cpu: "200m"
memory: "256Mi"
volumeMounts:
- mountPath: /etc/certs
name: certs
lifecycle:
preStop:
exec:
command: ["sleep", "10"]
volumes:
- name: certs
secret:
secretName: istio-certs
Secara umum, setiap kolom di pod dapat ditetapkan. Namun, Anda harus berhati-hati untuk kolom tertentu:
Selain itu, kolom tertentu dapat dikonfigurasi dengan anotasi di Pod, meskipun sebaiknya gunakan pendekatan di atas untuk menyesuaikan setelan. Perhatikan dengan cermat anotasi berikut:
Misalnya, lihat anotasi resource di bawah:
spec:
template:
metadata:
annotations:
sidecar.istio.io/proxyCPU: "200m"
sidecar.istio.io/proxyCPULimit: "200m"
sidecar.istio.io/proxyMemory: "256Mi"
sidecar.istio.io/proxyMemoryLimit: "256Mi"
Memigrasikan aplikasi ke Cloud Service Mesh terkelola
Untuk memigrasikan aplikasi dari Cloud Service Mesh dalam cluster ke Cloud Service Mesh terkelola, lakukan langkah-langkah berikut:
Terkelola (TD)
kubectl label namespace NAMESPACE \
istio.io/rev- istio-injection=enabled --overwrite
Dikelola (Istiod)
Direkomendasikan: Jalankan perintah berikut untuk menerapkan label injeksi default ke namespace:
kubectl label namespace NAMESPACE \
istio.io/rev- istio-injection=enabled --overwrite
Jika Anda adalah pengguna lama dengan platform kontrol Istiod Terkelola: Sebaiknya gunakan injeksi default, tetapi injeksi berbasis revisi didukung. Gunakan petunjuk berikut:
Jika yakin bahwa aplikasi Anda berfungsi seperti yang diharapkan, Anda dapat menghapus
istiod
dalam cluster setelah mengalihkan semua namespace ke platform kontrol
terkelola, atau menyimpannya sebagai cadangan - istiod
akan otomatis diskalakan ke bawah untuk menggunakan
lebih sedikit resource. Untuk menghapus, lanjutkan ke
Menghapus kontrol plane lama.
Jika mengalami masalah, Anda dapat mengidentifikasi dan menyelesaikannya dengan menggunakan informasi di Memecahkan masalah panel kontrol terkelola dan jika perlu, melakukan roll back ke versi sebelumnya.
Menghapus platform kontrol lama
Setelah menginstal dan mengonfirmasi bahwa semua namespace menggunakan bidang kontrol yang dikelola Google, Anda dapat menghapus bidang kontrol lama.
kubectl delete Service,Deployment,HorizontalPodAutoscaler,PodDisruptionBudget istiod -n istio-system --ignore-not-found=true
Jika Anda menggunakan istioctl kube-inject
, bukan injeksi otomatis, atau jika Anda menginstal gateway tambahan, periksa metrik untuk bidang kontrol, dan pastikan jumlah endpoint yang terhubung adalah nol.
Kembalikan
Lakukan langkah-langkah berikut jika Anda perlu melakukan roll back ke versi panel kontrol sebelumnya:
Bidang kontrol terkelola akan otomatis diskalakan ke nol dan tidak menggunakan resource apa pun saat tidak digunakan. Penyediaan dan webhook yang berubah akan tetap ada dan tidak memengaruhi perilaku cluster.
Gateway kini disetel ke revisi asm-managed
. Untuk melakukan rollback, jalankan ulang
perintah penginstalan Cloud Service Mesh, yang akan men-deploy ulang gateway yang mengarah kembali
ke platform kontrol dalam cluster Anda:
kubectl -n istio-system rollout undo deploy istio-ingressgateway
Hasil yang diharapkan jika berhasil:
deployment.apps/istio-ingressgateway rolled back
Meng-uninstal Cloud Service Mesh
Bidang kontrol terkelola diskalakan secara otomatis ke nol saat tidak ada namespace yang menggunakannya. Untuk langkah-langkah mendetail, lihat Meng-uninstal Cloud Service Mesh.