Menginstal dan mengupgrade gateway
Anthos Service Mesh memberi Anda opsi untuk men-deploy dan mengelola gateway sebagai bagian dari mesh layanan Anda. Gateway menjelaskan load balancer yang beroperasi di edge mesh yang menerima koneksi HTTP/TCP masuk atau keluar. Gateway adalah proxy Envoy yang memberi Anda kontrol terperinci atas traffic yang masuk dan keluar dari mesh. Gateway terutama digunakan untuk mengelola traffic masuk, tetapi Anda juga dapat mengonfigurasi gateway untuk mengelola jenis traffic lainnya. Contoh:
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 akan mengakses jaringan eksternal, atau untuk memungkinkan kontrol traffic keluar yang aman guna menambah keamanan ke mesh Anda.
Gateway timur-barat: Proxy untuk traffic east-west agar workload layanan dapat berkomunikasi di seluruh batas cluster dalam mesh multi-utama di jaringan yang berbeda. Secara {i>default<i}, {i>gateway<i} 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.
Hal-hal seperti pemisahan traffic, pengalihan, dan logika percobaan ulang dapat dilakukan dengan menerapkan konfigurasi Gateway ke proxy gateway. Kemudian, daripada menambahkan perutean traffic lapisan aplikasi (L7) ke resource API yang sama, Anda akan mengikat Layanan Virtual ke Gateway. Hal ini memungkinkan Anda mengelola traffic gateway seperti traffic bidang data
lainnya di mesh layanan.
Anda dapat men-deploy gateway dengan berbagai cara dan memilih untuk menggunakan lebih dari satu topologi dalam cluster yang sama. Baca 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 yang tidak dikelola.
Praktik terbaik untuk bidang data terkelola
- Aktifkan bidang data terkelola.
- Tambahkan label revisi terkelola ke namespace.
- Men-deploy dan mengelola bidang kontrol dan gateway secara terpisah.
- Sebagai praktik terbaik keamanan, sebaiknya Anda men-deploy gateway di namespace yang berbeda dari bidang kontrol.
- Gunakan injeksi file bantuan otomatis (injeksi otomatis) untuk memasukkan konfigurasi proxy untuk gateway seperti cara memasukkan proxy file bantuan untuk layanan Anda.
Praktik terbaik ini:
- Pastikan gateway yang terkelola selalu diupdate secara otomatis dengan peningkatan dan update keamanan terbaru.
- Mengalihkan pengelolaan dan pemeliharaan instance gateway ke bidang data yang dikelola Anthos Service Mesh.
Praktik terbaik untuk bidang data yang tidak dikelola
- Men-deploy dan mengelola bidang kontrol dan gateway secara terpisah.
- Sebagai praktik terbaik keamanan, sebaiknya Anda men-deploy gateway di namespace yang berbeda dari bidang kontrol.
- Gunakan injeksi file bantuan otomatis (injeksi otomatis) untuk memasukkan konfigurasi proxy untuk gateway seperti cara memasukkan proxy file bantuan untuk layanan Anda.
Praktik terbaik ini:
- Izinkan administrator namespace Anda mengelola gateway tanpa memerlukan peningkatan hak istimewa untuk seluruh cluster Anda.
- Izinkan administrator Anda menggunakan alat atau mekanisme deployment yang sama dengan yang mereka gunakan untuk mengelola aplikasi Kubernetes untuk men-deploy dan mengelola gateway.
- Memberi administrator kontrol penuh atas Deployment gateway, dan juga menyederhanakan operasi. Ketika upgrade baru tersedia atau konfigurasi telah berubah, administrator mengupdate Pod gateway cukup dengan memulai ulang Pod. Hal ini membuat pengalaman mengoperasikan Deployment gateway sama seperti mengoperasikan proxy file bantuan untuk layanan Anda.
Men-deploy gateway
Untuk mendukung pengguna dengan alat deployment yang ada, Anthos Service Mesh mendukung cara yang sama untuk men-deploy gateway seperti Istio: IstioOperator
, Helm, dan YAML Kubernetes. Setiap metode memberikan hasil
yang sama. Meskipun dapat memilih metode yang paling Anda kenal, sebaiknya gunakan metode YAML Kubernetes karena lebih mudah diubah dan Anda dapat menyimpan manifes terhidrasi dalam kontrol sumber.
Buat namespace untuk gateway jika Anda belum memilikinya. Ganti
GATEWAY_NAMESPACE
dengan nama namespace Anda.kubectl create namespace GATEWAY_NAMESPACE
Untuk mengaktifkan injeksi otomatis, beri label namespace dengan label injeksi default jika tag default sudah disiapkan, atau dengan label revisi ke namespace Anda. Label yang Anda tambahkan juga bergantung pada apakah Anda men-deploy Anthos Service Mesh terkelola atau menginstal bidang kontrol dalam cluster. Label ini digunakan oleh webhook injeksi file bantuan untuk mengaitkan file bantuan yang diinjeksikan dengan revisi bidang kontrol tertentu.
Pilih tab di bawah sesuai dengan jenis penginstalan Anda (baik terkelola maupun dalam cluster).
Terkelola
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 6d7h asm-managed-rapid 6d7h
Dalam output, nilai dalam kolom
NAME
adalah label revisi yang sesuai dengan saluran rilis yang tersedia untuk versi Anthos Service Mesh.Dalam cluster
Untuk paket kontrol dalam cluster, Layanan dan Deployment
istiod
biasanya memiliki label revisi yang mirip denganistio.io/rev=asm-1233-2
, denganasm-1233-2
mengidentifikasi versi Anthos Service Mesh. Revisi menjadi bagian dari nama Layananistiod
, misalnya:istiod-asm-1233-2.istio-system
Gunakan perintah berikut untuk menemukan label revisi di
istiod
untuk bidang kontrol dalam cluster:kubectl get deploy -n istio-system -l app=istiod \ -o=jsonpath='{.items[*].metadata.labels.istio\.io\/rev}''{"\n"}'
Aktifkan namespace untuk injeksi. Ganti dan
REVISION
dengan nilai untuk label revisi.kubectl label namespace GATEWAY_NAMESPACE istio-injection- istio.io/rev=REVISION --overwrite
Jika Anda menginstal Anthos Service Mesh menggunakan
asmcli
, ubah ke direktori yang Anda tentukan di--output_dir
, lalucd
ke direktorisamples
.Jika Anda tidak menginstal menggunakan
asmcli
, salin file konfigurasi untuk gateway dari repositorianthos-service-mesh
.Anda dapat men-deploy contoh konfigurasi gateway yang terletak di direktori
samples/gateways/
sebagaimana adanya, atau mengubahnya sesuai kebutuhan.Masuk
kubectl apply -n GATEWAY_NAMESPACE -f samples/gateways/istio-ingressgateway
Traffic Keluar
kubectl apply -n GATEWAY_NAMESPACE -f samples/gateways/istio-egressgateway
Setelah Anda membuat deployment, pastikan layanan yang baru berfungsi dengan benar:
kubectl get pod,service -n GATEWAY_NAMESPACE
Pastikan outputnya mirip dengan yang 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
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 masuk atau keluar dari mesh. Label pada Pod deployment gateway digunakan oleh resource konfigurasi Gateway, jadi pemilih Gateway Anda harus cocok dengan label ini.
Misalnya, dalam deployment di atas, 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 yang diterapkan
Untuk sebagian besar kasus penggunaan, Anda harus mengupgrade gateway dengan mengikuti pola upgrade yang telah diterapkan. Karena gateway menggunakan injeksi Pod, Pod gateway baru yang dibuat akan otomatis dimasukkan dengan konfigurasi terbaru, yang mencakup versinya.
Jika ingin mengubah revisi bidang kontrol yang digunakan oleh gateway, Anda dapat menetapkan label istio.io/rev
pada Deployment gateway, yang juga akan memicu mulai ulang berkelanjutan.
Bidang kontrol terkelola
Karena Google mengelola upgrade bidang kontrol untuk bidang kontrol terkelola, cukup memulai ulang Deployment gateway dan pod baru akan otomatis dimasukkan 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 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 mulai ulang berkelanjutan. Langkah-langkah yang diperlukan bergantung pada apakah Anda perlu memperbarui
label revisi pada namespace dan/atau pod gateway.
Jika Anda memberi label pada namespace untuk injeksi, tetapkan label
istio.io/rev
pada namespace ke nilai revisi yang baru:kubectl label namespace GATEWAY_NAMESPACE \ istio-injection- istio.io/rev=REVISION \ --overwrite
Jika Anda mengaktifkan injeksi hanya untuk pod gateway, tetapkan label
istio.io/rev
pada Deployment ke nilai revisi yang 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 Anthos 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 subset traffic Anda. Misalnya, jika Anda ingin meluncurkan revisi baru, canary, buat salinan deployment gateway Anda 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
Setelah Deployment ini dibuat, Anda akan memiliki dua versi gateway, yang keduanya dipilih oleh Service yang sama:
kubectl get endpoints \
-o "custom-columns=NAME:.metadata.name,PODS:.subsets[*].addresses[*].targetRef.name" \
-n GATEWAY_NAMESPACE
Outputnya mirip dengan hal berikut ini:
NAME PODS
istio-ingressgateway istio-ingressgateway-788854c955-8gv96,istio-ingressgateway-canary-b78944cbd-mq2qf
Jika Anda yakin aplikasi Anda berfungsi seperti yang diharapkan, jalankan perintah ini untuk melakukan transisi ke versi baru dengan menghapus Deployment dengan kumpulan label istio.io/rev lama:
kubectl delete deploy/istio-ingressgateway -n GATEWAY_NAMESPACE
Jika Anda mengalami masalah saat menguji aplikasi dengan gateway versi baru, jalankan perintah ini untuk melakukan transisi kembali ke versi lama dengan menghapus Deployment dengan kumpulan label istio.io/rev yang baru:
kubectl delete deploy/istio-ingressgateway-canary -n GATEWAY_NAMESPACE
Konfigurasi lanjutan
Mengonfigurasi versi TLS minimum gateway
Untuk Anthos Service Mesh versi 1.14 dan yang lebih baru, 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.
Memecahkan masalah gateway
Gagal memperbarui image gateway dari auto
Saat Anda men-deploy atau mengupgrade gateway, Anthos Service Mesh akan menyisipkan auto
sebagai placeholder di kolom image
. Setelah panggilan untuk mengubah webhook,
Anthos Service Mesh secara otomatis mengganti placeholder ini dengan
gambar proxy Anthos Service Mesh yang sebenarnya. Jika panggilan ke webhook yang berubah gagal, placeholder auto
akan tetap ada, dan penampung tidak akan ditemukan. Hal ini biasanya
disebabkan oleh label namespace yang salah. Pastikan Anda telah mengonfigurasi namespace yang benar, lalu deploy atau upgrade gateway kembali.