Menginstal dan mengupgrade gateway dengan Istio API
Cloud Service Mesh memberi Anda opsi untuk men-deploy dan mengelola gateway sebagai bagian dari mesh layanan Anda. Gateway menjelaskan load balancer yang beroperasi di tepi mesh dan menerima koneksi HTTP/TCP masuk atau keluar. Gateway terutama digunakan untuk mengelola traffic masuk, tetapi Anda juga dapat mengonfigurasi gateway untuk mengelola jenis traffic lainnya.
Gateway keluar: Gateway keluar memungkinkan Anda mengonfigurasi node keluar khusus untuk traffic yang keluar dari mesh, sehingga Anda dapat membatasi layanan mana yang dapat atau harus mengakses jaringan eksternal, atau untuk mengaktifkan kontrol traffic keluar yang aman guna menambahkan keamanan ke mesh Anda, misalnya.
Gateway masuk: Gateway masuk memungkinkan Anda mengonfigurasi node masuk khusus untuk menerima koneksi HTTP/TCP masuk.
Gateway east-west: Proxy untuk east-west traffic guna memungkinkan workload layanan berkomunikasi di seluruh batas cluster dalam mesh multi-primer di jaringan yang berbeda. Secara default, gateway ini akan bersifat publik di Internet.
Halaman ini menjelaskan praktik terbaik untuk men-deploy dan mengupgrade proxy gateway serta contoh mengonfigurasi proxy gateway istio-ingressgateway dan istio-egressgateway Anda sendiri.
Anda dapat men-deploy gateway dengan berbagai cara dan dapat menggunakan lebih dari satu topologi dalam cluster yang sama. Lihat Topologi deployment gateway dalam dokumentasi Istio untuk mempelajari topologi ini lebih lanjut.
Praktik terbaik untuk men-deploy gateway
Praktik terbaik untuk men-deploy gateway bergantung pada apakah Anda menggunakan bidang data terkelola atau bidang data tidak terkelola.
Praktik terbaik untuk bidang data terkelola
- Aktifkan bidang data terkelola.
- Tambahkan label revisi terkelola ke namespace.
- Deploy dan kelola bidang kontrol dan gateway secara terpisah.
- Sebagai praktik terbaik keamanan, sebaiknya Anda men-deploy gateway di namespace yang berbeda dari bidang kontrol.
- Gunakan injeksi sidecar otomatis (injeksi otomatis) untuk menyuntikkan konfigurasi proxy untuk gateway, mirip dengan cara Anda menyuntikkan proxy sidecar untuk layanan Anda.
Praktik terbaik ini:
- Pastikan gateway terkelola Anda otomatis diperbarui dengan peningkatan dan update keamanan terbaru.
- Menghapus pengelolaan dan pemeliharaan instance gateway ke bidang data terkelola Cloud Service Mesh.
Praktik terbaik untuk bidang data tidak terkelola
- Deploy dan kelola bidang kontrol dan gateway secara terpisah.
- Sebagai praktik terbaik keamanan, sebaiknya Anda men-deploy gateway di namespace yang berbeda dari bidang kontrol.
- Gunakan injeksi sidecar otomatis (injeksi otomatis) untuk menyuntikkan konfigurasi proxy untuk gateway, mirip dengan cara Anda menyuntikkan proxy sidecar untuk layanan Anda.
Praktik terbaik ini:
- Memungkinkan administrator namespace mengelola gateway tanpa memerlukan hak istimewa yang ditingkatkan ke seluruh cluster Anda.
- Memungkinkan administrator Anda menggunakan alat atau mekanisme deployment yang sama yang mereka gunakan untuk mengelola aplikasi Kubernetes guna men-deploy dan mengelola gateway.
- Memberi administrator kontrol penuh atas Deployment gateway, dan juga menyederhanakan operasi. Saat upgrade baru tersedia atau konfigurasi telah berubah, administrator akan mengupdate Pod gateway dengan memulai ulang. Hal ini membuat pengalaman mengoperasikan Deployment gateway sama dengan mengoperasikan proxy sidecar untuk layanan Anda.
Men-deploy gateway contoh
Untuk mendukung pengguna dengan alat deployment yang ada, Cloud Service Mesh mendukung cara yang
sama untuk men-deploy gateway seperti
Istio:
IstioOperator, Helm, dan Kubernetes YAML. Setiap metode menghasilkan hasil yang sama. Meskipun Anda dapat memilih metode yang paling Anda kuasai, sebaiknya gunakan metode Kubernetes YAML karena lebih mudah diubah dan Anda dapat menyimpan manifes yang diisi dalam kontrol sumber.
Langkah-langkah berikut menunjukkan cara men-deploy gateway contoh.
Buat namespace untuk gateway jika Anda belum memilikinya. Ganti
GATEWAY_NAMESPACEdengan nama namespace Anda.kubectl create namespace GATEWAY_NAMESPACEAktifkan namespace untuk injeksi. Langkah-langkahnya bergantung pada penerapan bidang kontrol Anda.
Terkelola (TD)
- Terapkan label injeksi default ke namespace:
kubectl label namespace GATEWAY_NAMESPACE \ istio.io/rev- istio-injection=enabled --overwriteTerkelola (Istiod)
Direkomendasikan: Jalankan perintah berikut untuk menerapkan label injeksi default ke namespace:
kubectl label namespace GATEWAY_NAMESPACE \ istio.io/rev- istio-injection=enabled --overwriteJika Anda adalah pengguna yang sudah ada 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 di 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 GATEWAY_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 GATEWAY_NAMESPACE \ istio.io/rev- istio-injection=enabled --overwriteSebaiknya gunakan injeksi default, tetapi injeksi berbasis revisi didukung: Gunakan petunjuk berikut:
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_LABELadalah nilai label revisiistiodyang Anda catat pada langkah sebelumnya.kubectl label namespace GATEWAY_NAMESPACE \ istio-injection- istio.io/rev=REVISION_LABEL --overwrite
Salin file konfigurasi untuk gateway contoh dari repositori
anthos-service-mesh.Ubah direktori Anda ke direktori
samples. Untuk memastikan Anda berada di direktori yang benar, jalankan perintahlsuntuk mencantumkan konten direktori, lalu pastikan ada direktorigateways(yang akan Anda akses pada langkah berikutnya) dan direktorionline-boutique.Deploy gateway masuk atau keluar. Gateway ini terletak di direktori
samples/gateways/seperti apa adanya, atau ubah sesuai kebutuhan.Masuk
kubectl apply -n GATEWAY_NAMESPACE -f samples/gateways/istio-ingressgatewayKeluar
kubectl apply -n GATEWAY_NAMESPACE -f samples/gateways/istio-egressgatewaySetelah membuat deployment, pastikan layanan baru berfungsi dengan benar:
kubectl get pod,service -n GATEWAY_NAMESPACEPastikan outputnya mirip dengan hal berikut ini:
NAME READY STATUS RESTARTS AGE pod/istio-ingressgateway-856b7c77-bdb77 1/1 Running 0 3s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/istio-ingressgateway LoadBalancer 10.24.5.129 34.82.157.6 80:31904/TCP 3s
Kelola resource gateway seperti aplikasi Kubernetes lainnya. Contoh dalam repositori anthos-service-mesh-packages dimaksudkan untuk panduan dan panduan memulai cepat. Sesuaikan dengan kebutuhan Anda.
Pemilih gateway
Anda menerapkan konfigurasi Gateway ke proxy istio-ingressgateway dan istio-egressgateway untuk mengelola traffic masuk dan keluar untuk mesh Anda, sehingga Anda dapat menentukan traffic mana yang ingin Anda masukkan atau keluar dari mesh. Label pada Pod deployment gateway digunakan oleh resource konfigurasi Gateway, jadi penting agar pemilih Gateway Anda cocok dengan label ini.
Misalnya, dalam deployment sebelumnya, label istio=ingressgateway ditetapkan pada Pod gateway. Untuk menerapkan konfigurasi Gateway ke deployment ini, Anda harus memilih label yang sama:
apiVersion: networking.istio.io/v1beta1
kind: Gateway
metadata:
name: gateway
spec:
selector:
istio: ingressgateway
...
Untuk contoh konfigurasi Gateway dan Layanan Virtual, lihat frontend.yaml di aplikasi contoh Online Boutique.
Mengupgrade gateway
Upgrade langsung
Untuk sebagian besar kasus penggunaan, Anda harus mengupgrade gateway dengan mengikuti pola upgrade langsung. Karena gateway menggunakan injeksi Pod, Pod gateway baru yang dibuat akan otomatis disuntikkan dengan konfigurasi terbaru, yang mencakup versi.
Jika ingin mengubah revisi bidang kontrol yang digunakan oleh gateway, Anda dapat menetapkan label istio.io/rev pada Deployment gateway, yang juga akan memicu memulai ulang bertahap.
Bidang kontrol terkelola
Karena Google mengelola upgrade bidang kontrol untuk bidang kontrol terkelola, Anda cukup memulai ulang Deployment gateway dan pod baru akan otomatis disuntikkan dengan konfigurasi dan versi terbaru.
kubectl rollout restart deployment istio-ingressgateway \
-n GATEWAY_NAMESPACE
Bidang kontrol dalam cluster
Untuk menerapkan pola yang sama ke gateway Anda saat memiliki bidang kontrol dalam cluster, Anda harus mengubah revisi bidang kontrol yang digunakan oleh gateway.
Tetapkan label istio.io/rev pada Deployment gateway yang akan memicu memulai ulang bertahap. Langkah-langkah yang diperlukan bergantung pada apakah Anda perlu mengupdate label revisi di namespace dan/atau pod gateway.
Jika Anda memberi label namespace untuk injeksi, tetapkan label
istio.io/revpada namespace ke nilai revisi baru:kubectl label namespace GATEWAY_NAMESPACE \ istio-injection- istio.io/rev=REVISION \ --overwriteJika Anda hanya mengaktifkan injeksi untuk pod gateway, tetapkan label
istio.io/revpada Deployment ke nilai revisi baru seperti file YAML Kubernetes berikut:cat <<EOF > gateway-deployment.yaml apiVersion: apps/v1 kind: Deployment metadata: name: istio-ingressgateway namespace: GATEWAY_NAMESPACE spec: selector: matchLabels: istio: ingressgateway template: metadata: annotations: # This is required to tell Cloud Service Mesh to inject the gateway with the # required configuration. inject.istio.io/templates: gateway labels: istio: ingressgateway istio.io/rev: REVISION spec: containers: - name: istio-proxy image: auto # The image will automatically update each time the pod starts. EOF kubectl apply -f gateway-deployment.yaml
Upgrade canary (lanjutan)
Jika Anda menggunakan bidang kontrol dalam cluster dan ingin mengontrol peluncuran revisi bidang kontrol baru secara lebih lambat, Anda dapat mengikuti pola upgrade canary. Anda dapat menjalankan beberapa versi Deployment gateway dan memastikan semuanya berfungsi seperti yang diharapkan dengan sebagian traffic Anda. Misalnya,
jika Anda ingin meluncurkan revisi baru, canary, buat salinan Deployment gateway
dengan label istio.io/rev=REVISION yang ditetapkan ke
revisi baru dan nama baru, misalnya istio-ingressgateway-canary:
apiVersion: apps/v1
kind: Deployment
metadata:
name: istio-ingressgateway-canary
namespace: GATEWAY_NAMESPACE
spec:
selector:
matchLabels:
istio: ingressgateway
template:
metadata:
annotations:
inject.istio.io/templates: gateway
labels:
istio: ingressgateway
istio.io/rev: REVISION # Set to the control plane revision you want to deploy
spec:
containers:
- name: istio-proxy
image: auto
Saat Deployment ini dibuat, Anda akan memiliki dua versi gateway, yang keduanya dipilih oleh Layanan yang sama:
kubectl get endpoints -o
"custom-columns=NAME:.metadata.name,PODS:.subsets[*].addresses[*].targetRef.name"
NAME PODS
istio-ingressgateway istio-ingressgateway-788854c955-8gv96,istio-ingressgateway-canary-b78944cbd-mq2qf
Jika Anda yakin bahwa aplikasi Anda berfungsi seperti yang diharapkan, jalankan perintah ini untuk bertransisi ke versi baru dengan menghapus Deployment dengan label istio.io/rev lama yang ditetapkan:
kubectl delete deploy/istio-ingressgateway -n GATEWAY_NAMESPACE
Jika Anda mengalami masalah saat menguji aplikasi dengan versi gateway baru, jalankan perintah ini untuk bertransisi kembali ke versi lama dengan menghapus Deployment dengan label istio.io/rev baru yang ditetapkan:
kubectl delete deploy/istio-ingressgateway-canary -n GATEWAY_NAMESPACE
Konfigurasi lanjutan
Mengonfigurasi versi TLS minimum gateway
Untuk Cloud Service Mesh, versi TLS minimum default untuk server gateway adalah 1.2.
Anda dapat mengonfigurasi versi TLS minimum menggunakan kolom minProtocolVersion.
Untuk mengetahui informasi selengkapnya, lihat
ServerTLSSettings.
Fitur yang tidak didukung
Jika Anda memiliki TRAFFIC_DIRECTOR
penerapan bidang kontrol maka
kolom atau nilai berikut di Gateway tidak didukung:
- ServerTLSSettings.TLSmode dengan nilai
AUTO_PASSTHROUGH - ServerTLSSettings.verifyCertificateSpki
- ServerTLSSettings.verifyCertificateHash
Memecahkan masalah gateway
Gagal mengupdate gambar gateway dari auto
Saat Anda men-deploy atau mengupgrade gateway, Cloud Service Mesh akan menyisipkan auto sebagai placeholder di kolom image. Setelah panggilan ke webhook yang berubah, Cloud Service Mesh akan otomatis mengganti placeholder ini dengan gambar proxy Cloud Service Mesh yang sebenarnya. Jika panggilan ke webhook yang berubah gagal, placeholder auto akan tetap ada, dan container tidak akan ditemukan. Hal ini biasanya disebabkan oleh label namespace yang salah. Pastikan Anda mengonfigurasi namespace yang benar, lalu deploy atau upgrade gateway lagi.