Melakukan orientasi workload Kubernetes
Cloud Service Mesh memungkinkan Anda mengelola, mengamankan, dan mengamati traffic di seluruh microservice dengan mengintegrasikan workload Kubernetes ke dalam mesh. Mengonfigurasi injeksi proxy sidecar untuk namespace dan workload Anda akan memberikan penemuan layanan yang seragam, enkripsi mutual TLS (mTLS), dan telemetri mendetail tanpa mengubah kode aplikasi Anda.
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 yang terpasang.
Beri nama port layanan Anda. Meskipun GKE memungkinkan Anda menentukan port layanan tanpa nama, Cloud Service Mesh mengharuskan Anda memberikan nama untuk port yang cocok dengan protokol port.
Beri label pada deployment Anda. Dengan begitu, Anda dapat menggunakan fitur pengelolaan traffic Cloud Service Mesh seperti memisahkan traffic antara versi layanan yang sama.
Contoh deployment dan layanan berikut mengilustrasikan persyaratan ini:
Setelah men-deploy layanan di cluster dengan Cloud Service Mesh, pastikan untuk memasukkan proxy sidecar.
Contoh: Men-deploy contoh Butik Online
Aplikasi contoh Butik Online di repositori
anthos-service-mesh-packages
dimodifikasi dari kumpulan manifes asli di repositori
microservices-demo. Dengan mengikuti praktik terbaik, setiap layanan di-deploy di namespace terpisah dengan akun layanan yang unik.
Buat namespace untuk aplikasi:
kubectl apply -f \ DIR_PATH/samples/online-boutique/kubernetes-manifests/namespacesOutput 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 createdAktifkan namespace untuk injeksi. Langkah-langkahnya bergantung pada implementasi bidang kontrol Anda.
Terkelola (TD)
Terapkan label injeksi default ke namespace:
for ns in ad cart checkout currency email frontend loadgenerator payment product-catalog recommendation shipping; do kubectl label namespace $ns \ istio.io/rev- istio-injection=enabled --overwrite done;Terkelola (Istiod)
Direkomendasikan: Jalankan perintah berikut untuk menerapkan label injeksi default ke namespace:
for ns in ad cart checkout currency email frontend loadgenerator payment product-catalog recommendation shipping; do kubectl label namespace $ns \ istio.io/rev- istio-injection=enabled --overwrite done;Jika Anda adalah pengguna lama dengan bidang kontrol Istiod Terkelola: Sebaiknya gunakan injeksi default, tetapi injeksi berbasis revisi didukung. Gunakan petunjuk berikut:
Jalankan perintah berikut untuk menemukan saluran rilis yang tersedia:
kubectl -n istio-system get controlplanerevisionOutputnya mirip dengan hal berikut ini:
NAME AGE asm-managed-rapid 6d7hDalam output, nilai di kolom
NAMEadalah label revisi yang sesuai dengan saluran rilis yang tersedia untuk versi Cloud Service Mesh.Terapkan label revisi ke namespace:
for ns in ad cart checkout currency email frontend loadgenerator payment product-catalog recommendation shipping; do kubectl label namespace $ns \ istio-injection- istio.io/rev=REVISION_LABEL --overwrite done;
Dalam cluster
Direkomendasikan: Jalankan perintah berikut untuk menerapkan label injeksi default ke namespace:
for ns in ad cart checkout currency email frontend loadgenerator payment product-catalog recommendation shipping; do kubectl label namespace $ns \ istio.io/rev- istio-injection=enabled --overwrite done;Sebaiknya gunakan injeksi default, tetapi injeksi berbasis revisi juga didukung: Gunakan petunjuk berikut:
Gunakan perintah berikut untuk menemukan label revisi pada
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_LABELadalah nilai label revisiistiodyang Anda catat di langkah sebelumnya.for ns in ad cart checkout currency email frontend loadgenerator payment product-catalog recommendation shipping; do kubectl label namespace $ns \ istio-injection- istio.io/rev=REVISION_LABEL --overwrite done;
Men-deploy aplikasi contoh ke cluster.
Buat akun layanan dan deployment:
kubectl apply -f \ DIR_PATH/samples/online-boutique/kubernetes-manifests/deploymentsOutput 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 createdBuat layanan:
kubectl apply -f \ DIR_PATH/samples/online-boutique/kubernetes-manifests/servicesOutput 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 createdBuat entri layanan:
kubectl apply -f \ DIR_PATH/samples/online-boutique/istio-manifests/allow-egress-googleapis.yamlOutput yang diharapkan:
serviceentry.networking.istio.io/allow-egress-googleapis created serviceentry.networking.istio.io/allow-egress-google-metadata created
Menamai port layanan
Agar dapat disertakan dalam Cloud Service Mesh, port layanan harus diberi nama, dan nama tersebut harus menyertakan protokol port, misalnya:
apiVersion: v1
kind: Service
metadata:
name: ratings
labels:
app: ratings
service: ratings
spec:
ports:
- port: 9080
name: httpNama 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-webAgar 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 akan diperlakukan sebagaitcp, dan metrik tidak ditampilkan untuk layanan tersebut.
Memasukkan proxy sidecar
Bagian ini membahas cara mengonfigurasi injeksi proxy sidecar dengan Cloud Service Mesh untuk meningkatkan keamanan, keandalan, dan kemampuan observasi jaringan. Fungsi-fungsi ini diabstraksikan dari container utama aplikasi dan diimplementasikan dalam proxy di luar proses umum (sidecar), yang dikirimkan sebagai container terpisah dalam Pod yang sama. Anda dapat menggunakan fitur Cloud Service Mesh tanpa mendesain ulang aplikasi produksi Anda untuk berpartisipasi dalam mesh layanan.
Injeksi proxy sidecar otomatis (injeksi otomatis) terjadi saat Cloud Service Mesh mendeteksi label namespace yang Anda konfigurasi untuk Pod workload. Proxy ini mengintersepsi semua traffic masuk dan keluar ke workload dan berkomunikasi dengan Cloud Service Mesh.
Mengaktifkan injeksi sidecar otomatis
Aktifkan namespace untuk injeksi. Langkah-langkahnya bergantung pada implementasi bidang kontrol Anda.
Terkelola (TD)
- Terapkan label injeksi default ke namespace:
kubectl label namespace NAMESPACE istio.io/rev- istio-injection=enabled --overwriteTerkelola (Istiod)
Direkomendasikan: Jalankan perintah berikut untuk menerapkan label injeksi default ke namespace:
kubectl label namespace NAMESPACE \ istio.io/rev- istio-injection=enabled --overwriteJika Anda adalah pengguna lama dengan bidang kontrol Istiod Terkelola: Sebaiknya gunakan injeksi default, tetapi injeksi berbasis revisi didukung. Gunakan petunjuk berikut:
Jalankan perintah berikut untuk menemukan saluran rilis yang tersedia:
kubectl -n istio-system get controlplanerevisionOutputnya mirip dengan hal berikut ini:
NAME AGE asm-managed-rapid 6d7hCATATAN: 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 di kolom
NAMEadalah 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
Direkomendasikan: Jalankan perintah berikut untuk menerapkan label injeksi default ke namespace:
kubectl label namespace NAMESPACE \ istio.io/rev- istio-injection=enabled --overwriteSebaiknya gunakan injeksi default, tetapi injeksi berbasis revisi juga didukung: Gunakan petunjuk berikut:
Gunakan perintah berikut untuk menemukan label revisi pada
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_LABELadalah nilai label revisiistiodyang Anda catat di langkah sebelumnya.kubectl label namespace NAMESPACE \ istio-injection- istio.io/rev=REVISION_LABEL --overwrite
Mulai ulang pod yang terpengaruh, menggunakan langkah-langkah di bagian berikutnya.
Beri anotasi pada namespace
demosebagai berikut:kubectl annotate --overwrite namespace NAMESPACE \ mesh.cloud.google.com/proxy='{"managed":"true"}'
Memulai ulang Pod untuk mengupdate proxy sidecar
Dengan injeksi sidecar otomatis, Anda dapat mengupdate sidecar untuk Pod yang ada dengan memulai ulang Pod:
Cara memulai ulang Pod bergantung pada apakah Pod tersebut 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, dan Pod tersebut akan otomatis dibuat ulang dengan file bantuan:
kubectl delete pod -n NAMESPACE --all
Pastikan semua Pod di namespace telah diinjeksikan sidecar:
kubectl get pod -n NAMESPACE
Dalam contoh output berikut dari perintah sebelumnya, perhatikan bahwa kolom
READYmenunjukkan ada dua container untuk setiap workload Anda: container utama dan container untuk proxy sidecar.NAME READY STATUS RESTARTS AGE WORKLOAD 2/2 Running 0 20s ...