Mengaktivasi workload Kubernetes
Halaman ini menunjukkan cara melakukan aktivasi workload Kubernetes dengan Cloud Service Mesh.
Men-deploy layanan Kubernetes
Untuk men-deploy layanan Kubernetes ke cluster dengan Cloud Service Mesh, Anda harus melakukan hal berikut:
Buat Layanan Kubernetes untuk semua container. Semua Deployment harus memiliki layanan Kubernetes.
Beri nama port layanan Anda. Meskipun GKE memungkinkan Anda menentukan port layanan tanpa nama, Cloud Service Mesh mengharuskan Anda memberikan nama untuk port yang sesuai dengan protokol port.
Melabeli deployment Anda. Dengan demikian, Anda dapat menggunakan fitur pengelolaan traffic Cloud Service Mesh, seperti membagi traffic antar-versi layanan yang sama.
Contoh deployment dan layanan berikut menggambarkan persyaratan ini:
Setelah men-deploy layanan Anda pada cluster dengan Cloud Service Mesh, pastikan untuk memasukkan proxy file bantuan.
Contoh: Men-deploy sampel Butik Online
Aplikasi contoh Online Boutique di repositori
anthos-service-mesh-packages
diubah dari kumpulan manifes asli di
repositori
microservices-demo
. Dengan mengikuti praktik terbaik, setiap layanan di-deploy dalam namespace terpisah dengan akun layanan yang unik.
Buat namespace untuk aplikasi:
kubectl apply -f \ DIR_PATH/samples/online-boutique/kubernetes-manifests/namespaces
Output yang diharapkan:
namespace/ad created namespace/cart created namespace/checkout created namespace/currency created namespace/email created namespace/frontend created namespace/loadgenerator created namespace/payment created namespace/product-catalog created namespace/recommendation created namespace/shipping created
Mengaktifkan injeksi file bantuan otomatis (injeksi otomatis). Perintah ini berbeda, bergantung pada apakah Anda menggunakan Cloud Service Mesh terkelola atau Cloud Service Mesh dalam cluster. Jika Anda menggunakan Cloud Service Mesh terkelola, gunakan label injeksi default (misalnya,
istio-injection=enabled
). Jika Anda menggunakan Cloud Service Mesh dalam cluster, gunakan label revisi yang sama dengan yang Anda gunakan untuk menganotasi namespace gateway ingress. Perlu diketahui bahwa pelanggan Pesawat Kontrol Terkelola yang sudah dimigrasikan juga dapat menggunakan label revisi yang ada selain label injeksi default.Label injeksi default
Terapkan label injeksi default ke namespace. Dalam perintah berikut, GATEWAY_NAMESPACE adalah nilai yang sama dengan yang Anda gunakan untuk menganotasi namespace gateway masuk.
for ns in ad cart checkout currency email frontend loadgenerator payment product-catalog recommendation shipping; do kubectl label namespace $ns istio-injection=enabled istio.io/rev- done;
Output yang diharapkan:
namespace/ad labeled namespace/cart labeled namespace/checkout labeled namespace/currency labeled namespace/email labeled namespace/frontend labeled namespace/loadgenerator labeled namespace/payment labeled namespace/product-catalog labeled namespace/recommendation labeled namespace/shipping labeled
Label revisi
Terapkan label revisi ke namespace aplikasi. Dalam perintah berikut, REVISION adalah nilai yang sama dengan yang Anda gunakan untuk menganotasi namespace gateway masuk.
for ns in ad cart checkout currency email frontend loadgenerator payment product-catalog recommendation shipping; do kubectl label namespace $ns istio.io/rev=REVISION --overwrite done;
Output yang diharapkan:
namespace/ad labeled namespace/cart labeled namespace/checkout labeled namespace/currency labeled namespace/email labeled namespace/frontend labeled namespace/loadgenerator labeled namespace/payment labeled namespace/product-catalog labeled namespace/recommendation labeled namespace/shipping labeled
Men-deploy aplikasi contoh ke cluster.
Buat deployment dan akun layanan:
kubectl apply -f \ DIR_PATH/samples/online-boutique/kubernetes-manifests/deployments
Output yang diharapkan:
serviceaccount/ad created deployment.apps/adservice created serviceaccount/cart created deployment.apps/cartservice created serviceaccount/checkout created deployment.apps/checkoutservice created serviceaccount/currency created deployment.apps/currencyservice created serviceaccount/email created deployment.apps/emailservice created serviceaccount/frontend created deployment.apps/frontend created serviceaccount/loadgenerator created deployment.apps/loadgenerator created serviceaccount/payment created deployment.apps/paymentservice created serviceaccount/product-catalog created deployment.apps/productcatalogservice created serviceaccount/recommendation created deployment.apps/recommendationservice created serviceaccount/shipping created deployment.apps/shippingservice created
Buat layanan:
kubectl apply -f \ DIR_PATH/samples/online-boutique/kubernetes-manifests/services
Output yang diharapkan:
service/adservice created service/cartservice created service/checkoutservice created service/currencyservice created service/emailservice created service/frontend created service/frontend-external created service/paymentservice created service/productcatalogservice created service/recommendationservice created service/shippingservice created
Buat entri layanan:
kubectl apply -f \ DIR_PATH/samples/online-boutique/istio-manifests/allow-egress-googleapis.yaml
Output yang diharapkan:
serviceentry.networking.istio.io/allow-egress-googleapis created serviceentry.networking.istio.io/allow-egress-google-metadata created
Beri nama port layanan
Agar disertakan dalam Anthos Service Mesh, port layanan harus diberi nama, dan namanya harus menyertakan protokol port, misalnya:
apiVersion: v1 kind: Service metadata: name: ratings labels: app: ratings service: ratings spec: ports: - port: 9080 name: http
Nama port layanan dapat menyertakan akhiran dalam sintaksis berikut:
name: protocol[-suffix]
dengan tanda kurung siku menunjukkan akhiran opsional yang harus diawali dengan
tanda hubung, misalnya:
kind: Service metadata: name: myservice spec: ports: - number: 3306 name: mysql - number: 80 name: http-web
Agar metrik ditampilkan di Konsol Google Cloud, port layanan harus diberi nama dengan salah satu protokol berikut: http
, http2
, atau grpc
.
Port layanan yang diberi nama dengan protokol https
diperlakukan sebagai tcp
, dan metrik tidak ditampilkan untuk layanan tersebut.
Memasukkan proxy file bantuan
Bagian ini membahas cara mengonfigurasi injeksi proxy file bantuan dengan Cloud Service Mesh untuk meningkatkan keamanan, keandalan, dan kemampuan observasi jaringan. Fungsi-fungsi ini diabstraksikan dari penampung utama aplikasi dan diterapkan di proxy di luar proses umum (sidecar), yang dikirim sebagai container terpisah dalam Pod yang sama. Anda dapat menggunakan fitur-fitur Cloud Service Mesh tanpa mendesain ulang aplikasi produksi untuk berpartisipasi dalam mesh layanan.
Injeksi proxy file bantuan otomatis (injeksi otomatis) terjadi saat Cloud Service Mesh mendeteksi label namespace yang Anda konfigurasi untuk Pod beban kerja. Proxy mencegat semua traffic masuk dan keluar ke workload dan berkomunikasi dengan Cloud Service Mesh.
Mengaktifkan injeksi file bantuan otomatis
Aktifkan namespace untuk injeksi. Langkah-langkah ini bergantung pada penerapan bidang kontrol Anda.
Terkelola (TD)
- Terapkan label revisi ke namespace:
kubectl label namespace NAMESPACE istio.io/rev- istio-injection=enabled --overwrite
Dikelola (Istiod)
Pengguna baru menggunakan perintah berikut untuk menerapkan label revisi ke namespace:
kubectl label namespace NAMESPACE \ istio.io/rev- istio-injection=enabled --overwrite
Pengguna lama dengan bidang kontrol Istiod Terkelola menggunakan petunjuk berikut:
Gunakan 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 dalam cluster tidak didukung.
Dalam output, nilai dalam 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
Dalam cluster
Gunakan perintah berikut untuk menemukan label revisi di
istiod
:kubectl get deploy -n istio-system -l app=istiod -o \ jsonpath={.items[*].metadata.labels.'istio\.io\/rev'}'{"\n"}'
Terapkan label revisi ke namespace. Dalam perintah berikut,
REVISION
adalah nilai label revisiistiod
yang Anda catat di langkah sebelumnya.kubectl label namespace NAMESPACE \ istio.io/rev- istio-injection=enabled --overwrite
Mulai ulang pod yang terpengaruh, menggunakan langkah-langkah di bagian berikutnya.
Anotasikan namespace
demo
sebagai berikut:kubectl annotate --overwrite namespace NAMESPACE \ mesh.cloud.google.com/proxy='{"managed":"true"}'
Memulai ulang Pod untuk mengupdate proxy file bantuan
Dengan injeksi file bantuan otomatis, Anda dapat mengupdate file bantuan untuk Pod yang ada dengan memulai ulang Pod:
Cara memulai ulang Pod bergantung pada apakah Pod dibuat sebagai bagian dari Deployment.
Jika Anda menggunakan Deployment, mulai ulang Deployment, yang akan memulai ulang semua Pod dengan file bantuan:
kubectl rollout restart deployment -n NAMESPACE
Jika Anda tidak menggunakan Deployment, hapus Pod, lalu Pod akan otomatis dibuat ulang dengan file bantuan:
kubectl delete pod -n NAMESPACE --all
Pastikan semua Pod dalam namespace telah memasukkan file bantuan:
kubectl get pod -n NAMESPACE
Pada contoh output dari perintah sebelumnya berikut, perhatikan bahwa kolom
READY
menunjukkan ada dua container untuk setiap beban kerja Anda: container utama dan container untuk proxy sidecar.NAME READY STATUS RESTARTS AGE WORKLOAD 2/2 Running 0 20s ...