Menginstal dan mengupgrade gateway
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 edge jala yang menerima koneksi HTTP/TCP masuk atau keluar. Gateway adalah Envoy {i>proxy<i} yang memberi Anda kontrol mendetail atas lalu lintas yang masuk dan meninggalkan {i>mesh<i}. Gateway terutama digunakan untuk mengelola traffic masuk tetapi Anda juga dapat mengonfigurasi {i>gateway<i} untuk mengelola jenis traffic lain. Contoh:
Gateway keluar: Gateway keluar memungkinkan Anda mengonfigurasi node keluar khusus untuk traffic yang meninggalkan mesh, sehingga Anda dapat membatasi layanan mana yang dapat atau harus mengakses jaringan eksternal, atau mengaktifkan kontrol lalu lintas keluar yang aman untuk keamanan ke {i>mesh<i} Anda, misalnya.
Gateway timur-barat: {i>Proxy<i} untuk Lalu lintas east-west agar workload layanan dapat berkomunikasi melalui batas cluster dalam multi-primary pada jaringan yang berbeda. Secara {i>default<i}, gateway ini publik di Internet.
Halaman ini menjelaskan praktik terbaik untuk men-deploy dan mengupgrade gateway
serta contoh konfigurasi istio-ingressgateway
dan
Proxy gateway istio-egressgateway
.
Hal seperti pemisahan lalu lintas, pengalihan, dan logika percobaan ulang dimungkinkan dengan
menerapkan
Gateway
ke proxy gateway. Kemudian, alih-alih menambahkan lapisan
perutean traffic (L7) ke resource API yang sama, Anda akan mengikat
Layanan Virtual
ke Gateway. Hal ini memungkinkan Anda mengelola traffic gateway seperti bidang data lainnya
traffic di mesh layanan.
Anda dapat men-deploy gateway dengan berbagai cara dan dapat memilih untuk menggunakan lebih dari satu topologi dalam cluster yang sama. Rujuk ke 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 gateway bidang data terkelola 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 namespace yang berbeda dari bidang kontrol.
- Gunakan injeksi file bantuan otomatis (injeksi otomatis) untuk memasukkan konfigurasi proxy bagi gateway yang serupa cara Anda memasukkan {i> proxy<i} file bantuan untuk layanan Anda.
Praktik terbaik berikut:
- Memastikan gateway terkelola secara otomatis selalu diperbarui dengan informasi terbaru penyempurnaan dan pembaruan keamanan.
- Memindahkan beban pengelolaan dan pemeliharaan instance gateway ke Cloud Service Mesh bidang data terkelola.
Praktik terbaik untuk bidang data tidak terkelola
- Men-deploy dan mengelola bidang kontrol dan gateway secara terpisah.
- Sebagai praktik terbaik keamanan, sebaiknya Anda men-deploy gateway namespace yang berbeda dari bidang kontrol.
- Gunakan injeksi file bantuan otomatis (injeksi otomatis) untuk memasukkan konfigurasi proxy bagi gateway yang serupa cara Anda memasukkan {i> proxy<i} file bantuan untuk layanan Anda.
Praktik terbaik berikut:
- Memungkinkan administrator namespace Anda mengelola gateway tanpa perlu hak istimewa yang ditingkatkan ke seluruh cluster Anda.
- Izinkan administrator Anda menggunakan alat atau mekanisme deployment yang sama yang mereka gunakan untuk mengelola aplikasi Kubernetes gateway.
- Berikan administrator kontrol penuh atas Deployment gateway, dan juga menyederhanakan operasi. Saat upgrade baru tersedia atau konfigurasi telah berubah, administrator akan mengupdate Pod gateway cukup dengan memulai ulang. Hal ini membuat pengalaman pengoperasian Deployment gateway sama dengan yang mengoperasikan {i>proxy<i} file bantuan untuk layanan Anda.
Men-deploy gateway
Untuk mendukung pengguna dengan alat deployment yang ada, Cloud Service Mesh mendukung
cara yang sama untuk men-deploy gateway
Istio:
IstioOperator
, Helm, dan YAML Kubernetes. Setiap metode menghasilkan
hasil pengujian tersebut. Meskipun Anda dapat memilih metode yang paling Anda kenal, kami
merekomendasikan agar Anda menggunakan metode YAML Kubernetes
memodifikasi dan Anda dapat menyimpan
manifes yang terhidrasi dalam kontrol sumber.
Buat namespace untuk gateway jika Anda belum memilikinya. Ganti
GATEWAY_NAMESPACE
dengan nama Anda namespace.kubectl create namespace GATEWAY_NAMESPACE
Untuk mengaktifkan injeksi otomatis, beri label namespace Anda dengan label injeksi default apakah tag default sudah disiapkan, atau dengan label revisi untuk namespace Anda. Label yang Anda tambahkan juga bergantung pada apakah Anda men-deploy atau tidak Cloud Layanan Cloud terkelola atau memasang bidang kontrol dalam cluster. Label digunakan oleh file bantuan webhook injection untuk mengaitkan file bantuan yang diinjeksi dengan kontrol tertentu versi baru.
Pilih tab di bawah ini sesuai dengan jenis penginstalan Anda (baik yang terkelola 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 di bawah kolom
NAME
adalah label revisi yang sesuai dengan standar saluran rilis untuk versi Cloud Service Mesh.Dalam cluster
Untuk bidang kontrol dalam cluster, Layanan dan Deployment
istiod
biasanya memiliki label revisi yang mirip denganistio.io/rev=asm-1204-0
, denganasm-1204-0
mengidentifikasi versi Cloud Service Mesh. Revisi menjadi bagian dari nama Layananistiod
, misalnya:istiod-asm-1204-0.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"}'
Mengaktifkan 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 Cloud Service Mesh menggunakan
asmcli
, ubah ke direktori yang 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
samples/gateways/
apa adanya, atau modifikasi sesuai kebutuhan.Masuk
kubectl apply -n GATEWAY_NAMESPACE -f gateways/istio-ingressgateway
Keluar
kubectl apply -n GATEWAY_NAMESPACE -f gateways/istio-egressgateway
Setelah membuat deployment, pastikan layanan baru berfungsi dengan baik 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
Gateway
ke proxy istio-ingressgateway
dan istio-egressgateway
untuk
mengelola lalu lintas masuk dan keluar untuk mesh Anda, memungkinkan
traffic yang ingin Anda masukkan
atau keluar dari mesh. Label di gateway
Pod deployment digunakan oleh resource konfigurasi Gateway
bahwa pemilih {i>Gateway<i} Anda 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 {i>Gateway<i} dan Layanan Virtual, lihat frontend.yaml dalam aplikasi contoh Boutique Online.
Upgrade gateway
Upgrade di tempat
Untuk sebagian besar kasus penggunaan, Anda harus mengupgrade gateway pola upgrade. Karena gateway menggunakan injeksi Pod, Pod gateway baru akan otomatis dimasukkan dengan konfigurasi terbaru, yang menyertakan versi.
Jika Anda ingin mengubah revisi bidang
kontrol yang digunakan oleh {i>gateway<i},
Anda dapat menyetel 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, Anda cukup memulai ulang Deployment gateway dan pod baru akan secara 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 Anda memiliki kontrol dalam cluster
bidang kontrol yang digunakan oleh gateway.
Menetapkan 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 namespace untuk injeksi, tetapkan label
istio.io/rev
pada namespace ke nilai revisi baru:kubectl label namespace GATEWAY_NAMESPACE \ istio-injection- istio.io/rev=REVISION \ --overwrite
Jika Anda mengaktifkan injeksi hanya untuk pod gateway, setel
istio.io/rev
label pada Deployment ke nilai revisi baru seperti berikut File YAML Kubernetes: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 menggunakan
mengontrol peluncuran revisi bidang kontrol baru, Anda dapat mengikuti canary
pola upgrade. Anda dapat menjalankan beberapa versi
gateway Deployment dan
memastikan semuanya berfungsi seperti yang
diharapkan pada sebagian traffic. Misalnya,
jika ingin meluncurkan revisi baru, canary, buat salinan gateway Anda
Deployment dengan label istio.io/rev=REVISION
disetel 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, keduanya dipilih oleh Layanan 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 puas karena aplikasi Anda berfungsi seperti yang diharapkan, jalankan untuk beralih ke versi baru dengan menghapus Deployment dengan Kumpulan label istio.io/rev:
kubectl delete deploy/istio-ingressgateway -n GATEWAY_NAMESPACE
Jika Anda mengalami masalah saat menguji aplikasi dengan versi baru gateway, jalankan perintah ini untuk beralih kembali ke versi lama dengan menghapus Deployment dengan kumpulan label istio.io/rev baru:
kubectl delete deploy/istio-ingressgateway-canary -n GATEWAY_NAMESPACE
Konfigurasi lanjutan
Mengonfigurasi versi TLS minimum gateway
Untuk Cloud 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 informasi selengkapnya, lihat
ServerTLSSettings.
Memecahkan masalah gateway
Gagal memperbarui gambar gateway dari auto
Saat Anda men-deploy atau mengupgrade gateway, Cloud Service Mesh menyisipkan auto
sebagai
placeholder di kolom image
. Setelah panggilan untuk mengubah webhook,
Cloud Service Mesh otomatis mengganti placeholder ini dengan
Gambar proxy Cloud Service Mesh. Jika panggilan untuk mengubah webhook gagal, auto
{i>placeholder<i} tetap ada, dan kontainer tidak akan ditemukan. Hal ini biasanya
disebabkan oleh label namespace yang salah. Pastikan Anda telah mengonfigurasi
namespace, lalu men-deploy atau mengupgrade gateway lagi.