Opsi untuk penyiapan Pod Google Kubernetes Engine menggunakan injeksi Envoy otomatis
Panduan ini memberi informasi tentang opsi dan tugas tambahan untuk injektor sespan otomatis Envoy.
Menambahkan proxy file bantuan ke workload yang ada
Setelah Anda menginstal injektor file bantuan ke cluster, proxy file bantuan secara otomatis dimasukkan ke pod yang baru dibuat dalam namespace yang diaktifkan. Jika Anda memiliki beban kerja yang sudah berjalan sebelum mengaktifkan injektor file bantuan, Anda harus {i>restart<i} agar injeksi terjadi.
Untuk pod yang dikelola oleh pengontrol Deployment, DaemonSet, atau StatefulSet, Anda dapat jalankan perintah berikut:
# Deployment kubectl rollout restart deployment/DEPLOYMENT_NAME --namespace NAMESPACE # DaemonSet kubectl rollout restart daemonset/DAEMONSET_NAME --namespace NAMESPACE # StatefulSet kubectl rollout restart statefulset/STATEFULSET_NAME --namespace NAMESPACE
Jika Anda tidak menggunakan salah satu pengontrol di atas untuk men-deploy pod, Anda harus menghapus pod satu per satu. Setelah itu, iklan tersebut akan dibuat ulang secara otomatis dengan proxy file bantuan baru.
kubectl delete pod POD_NAME -n NAMESPACE
Pastikan container proxy file bantuan telah dimasukkan di setiap pod Anda:
kubectl get pods -n NAMESPACE
Misalnya, dengan klien Crowdbox yang dibuat di atas, Anda akan melihat 2/2 pod berjalan, satu untuk aplikasi {i>sibukbox<i} itu sendiri dan satu untuk aplikasi Envoy yang telah dimasukkan proxy file bantuan:
NAME READY STATUS RESTARTS AGE busybox-c54f578c9-c9fk4 2/2 Running 183 7d15h
Penggantian injeksi
Secara default, mengaktifkan namespace akan mengaktifkan injeksi proxy file bantuan untuk semua pod yang ada. Injeksi juga dapat dikonfigurasi secara selektif untuk cakupan yang berbeda agar sesuai dengan kebutuhan tertentu. Misalnya, penggantian harus digunakan untuk mencegah injeksi proxy file bantuan untuk layanan gRPC tanpa proxy.
Perlu diketahui bahwa penggantian injeksi hanya berlaku saat namespace diaktifkan, dan berlaku dengan prioritas berikut: Anotasi Pod > NeverInjectSelector > Selalu InjeksiSelector > Default Kebijakan
Mengaktifkan/menonaktifkan injeksi untuk masing-masing pod tertentu
Gunakan anotasi pod berikut untuk mengaktifkan atau menonaktifkan injeksi untuk pod tertentu dalam namespace diaktifkan:
... metadata: annotations: sidecar.istio.io/inject: "true" / "false"
Mengaktifkan/menonaktifkan injeksi untuk grup pod tertentu
Injector file bantuan itu sendiri dapat dikonfigurasi untuk selalu atau tidak melakukan injeksi pod di mengaktifkan namespace berdasarkan Pemilih label Kubernetes. Misalnya, gunakan perintah berikut untuk mengonfigurasi injektor file bantuan untuk tidak memasukkan proxy file bantuan jika pod memiliki label "run=client":
kubectl edit configmap -n istio-control istio-sidecar-injector ... config: |- policy: enabled alwaysInjectSelector: [] neverInjectSelector: - matchLabels: run: client ...
Deployment injektor file bantuan yang sudah ada harus dimulai ulang untuk konfigurasi ini agar diterapkan.
Menyesuaikan perilaku intersepsi traffic
Secara default, semua traffic keluar dari aplikasi Anda dicegat dan dialihkan ke {i>proxy<i} file bantuan Envoy. Proxy Envoy kemudian dapat menangani traffic sesuai dengan instruksi yang diterima dari Cloud Service Mesh. Di beberapa sebaiknya ubah perilaku ini untuk mengabaikan proxy file bantuan.
Gunakan anotasi Pod berikut untuk mengecualikan traffic dari intersepsi dan pengalihan.
Kecualikan dari intersepsi oleh rentang alamat IP keluar
Anda dapat mengecualikan traffic agar tidak diintersepsi oleh rentang alamat IP.
... metadata: annotations: cloud.google.com/excludeOutboundCIDRs: "10.0.0.1/32,169.254.169.254/32"
Anotasi Pod cloud.google.com/excludeOutboundCIDRs
dipisahkan oleh koma
daftar rentang alamat IP keluar dalam format CIDR. Traffic keluar yang ditujukan ke
rentang alamat IP ini tidak
dialihkan ke file bantuan Envoy.
Perlu diperhatikan bahwa Anda perlu mencantumkan 169.254.169.254/32
dalam anotasi Pod untuk
memastikan bahwa aplikasi dapat berkomunikasi dengan server metadata. Jika Anda
jangan menentukan anotasi Pod cloud.google.com/excludeOutboundCIDRs
,
intersepsi traffic dikonfigurasi untuk mengecualikan "169.254.169.254/32"
rentang CIDR keluar.
Sertakan dalam intersepsi oleh rentang alamat IP keluar
Anda dapat menyertakan traffic dalam intersepsi berdasarkan rentang alamat IP.
... metadata: annotations: cloud.google.com/includeOutboundCIDRs: "10.0.0.1/32,169.254.169.254/32"
Anotasi Pod cloud.google.com/includeOutboundCIDRs
dipisahkan oleh koma
daftar rentang alamat IP keluar dalam format CIDR. Traffic keluar yang ditujukan ke
rentang alamat IP ini akan
dialihkan ke file bantuan Envoy.
Karakter pengganti *
dapat digunakan untuk mengalihkan semua traffic keluar. Kosong
menonaktifkan semua traffic keluar. Anotasi ditetapkan secara default ke *
.
Kecualikan dari intersepsi oleh nomor port keluar
Anda dapat mengecualikan traffic dari intersepsi dan pengalihan melalui port keluar angka
... metadata: annotations: cloud.google.com/excludeOutboundPorts: "10001, 10002"
Anotasi Pod cloud.google.com/excludeOutboundPorts
dipisahkan oleh koma
daftar port keluar. Traffic keluar yang ditujukan ke port ini dikecualikan dari
intersepsi dan pengalihan ke file bantuan Envoy.
Jika Anda tidak menentukan anotasi cloud.google.com/excludeOutboundPorts
,
lalu lintas keluar yang ditujukan untuk porta mana pun
dicegat dan dialihkan ke
Envoy bantuan. Ini sama dengan meneruskan
Anotasi cloud.google.com/excludeOutboundPorts
dengan daftar kosong ("").
Sertakan dalam intersepsi berdasarkan nomor port masuk
Anda dapat menyertakan traffic dalam intersepsi berdasarkan nomor port masuk.
... metadata: annotations: cloud.google.com/includeInboundPorts: "10001, 10002"
Anotasi Pod cloud.google.com/includeInboundPorts
dipisahkan oleh koma
daftar port masuk di mana lalu lintas akan dialihkan ke Envoy
file bantuan. Karakter pengganti *
dapat digunakan untuk mengonfigurasi pengalihan bagi semua
porta. Nilai kosong menonaktifkan semua pengalihan masuk. Nilai default-nya adalah
string kosong ("").
Kecualikan dari intersepsi berdasarkan nomor port masuk
Anda dapat mengecualikan traffic agar tidak ditangkap oleh nomor port masuk.
... metadata: annotations: cloud.google.com/excludeInboundPorts: "10001, 10002"
Anotasi Pod cloud.google.com/excludeInboundPorts
dipisahkan oleh koma
daftar porta masuk yang akan dikecualikan dari
pengalihan ke file bantuan Envoy. Tujuan
hanya berlaku saat semua traffic masuk (*
) dialihkan. Tujuan
nilai defaultnya adalah string kosong ("").
Aktifkan sertifikat terkelola
Anda dapat mengaktifkan sertifikat workload terkelola.
... metadata: annotations: cloud.google.com/enableManagedCerts: "true"
Jika anotasi Pod cloud.google.com/enableManagedCerts
ditetapkan ke true
,
Sertifikat workload terkelola GKE yang ditandatangani oleh Certificate Authority Service
dimasukkan dan dipasang di kontainer file bantuan. Nilai anotasi
nilai defaultnya adalah false
.
Mengonfigurasi metadata proxy file bantuan
Untuk mendukung fitur Cloud Service Mesh tambahan, proxy file bantuan dapat mewarisi metadata spesifik dari Pod yang dienkapsulasi. Ada dua cara untuk menyelesaikan ini. Kedua opsi tersebut menambahkan metadata dan membagikan metadata dengan Cloud Service Mesh saat proxy file bantuan terhubung ke Cloud Service Mesh. Opsinya saling eksklusif.
Opsi pertama memungkinkan Anda menentukan key-value pair metadata individual. Sebagai
untuk contoh ini, sertakan anotasi berikut dalam spesifikasi template Pod untuk
menerapkan label "version": "dev"
ke proxy file bantuan yang dimasukkan.
... metadata: annotations: cloud.google.com/proxyMetadata: '{"version": "dev"}'
Opsi kedua menambahkan semua label Pod ke file bantuan yang diinjeksikan {i>proxy<i}.
... metadata: annotations: cloud.google.com/forwardPodLabels: "true"
Jika Anda tidak menentukan anotasi cloud.google.com/forwardPodLabels
, Pod
label tidak akan ditambahkan ke proxy file bantuan. Perhatikan bahwa
cloud.google.com/proxyMetadata
dan cloud.google.com/forwardPodLabels
anotasi sama-sama bersifat eksklusif. Jika Anda mengatur keduanya,
cloud.google.com/forwardPodLabels
diprioritaskan dan cloud.google.com/proxyMetadata
akan diabaikan.
Pemfilteran konfigurasi
memungkinkan Cloud Service Mesh untuk
berbagi subset konfigurasi hanya dengan
proxy tertentu yang cocok dengan label "version": "dev"
ini.
Deployment yang ada harus dimulai ulang agar konfigurasi ini diterapkan.
Anotasi pod yang didukung
Cloud Service Mesh mendukung anotasi Pod berikut untuk file bantuan tanpa injeksi. Meskipun anotasi injektor file bantuan tambahan mungkin berfungsi, daftar berikut mewakili anotasi yang didukung oleh Cloud Service Mesh. Kepada menghindari kerusakan atau ketidakstabilan, jangan membuat dependensi pada anotasi lain dalam deployment produksi.
Nama Anotasi | Nilai | Deskripsi |
---|---|---|
sidecar.istio.io/inject | Boolean, direpresentasikan sebagai string. Misalnya: "true " |
Menentukan apakah file bantuan Envoy harus dimasukkan secara otomatis atau tidak ke dalam beban kerja. |
cloud.google.com/proxyMetadata | Peta JSON pasangan nilai kunci. Misalnya: "'{"version":
"dev"}' "
|
Menentukan key-value pair di peta JSON yang harus ditambahkan Metadata Envoy. |
cloud.google.com/forwardPodLabels | "true" (benar) atau "false" | Jika ditetapkan ke "true", semua label Pod akan ditambahkan ke metadata Envoy, dan label "cloud.google.com/proxyMetadata" diabaikan. Default-nya adalah "false". |
cloud.google.com/excludeOutboundPorts | Daftar port keluar yang dipisahkan koma | Traffic keluar yang menunjukkan salah satu port tujuan ini dikecualikan dari intersepsi/pengalihan ke file bantuan Envoy. Lalu lintas ini akan mengabaikan proxy Envoy dan tidak akan ditangani berdasarkan Cloud Service Mesh konfigurasi Anda. Default-nya adalah string kosong (yaitu ""). |
cloud.google.com/includeInboundPorts | Daftar port masuk yang dipisahkan koma | Daftar port masuk yang dipisahkan koma untuk lalu lintas yang dan dialihkan ke file bantuan Envoy. Gunakan karakter pengganti `*` untuk mengkonfigurasi pengalihan untuk semua porta. Nilai kosong akan menonaktifkan semua pengalihan masuk. Nilai default-nya adalah string kosong (""). |
cloud.google.com/excludeInboundPorts | Daftar port masuk yang dipisahkan koma | Daftar port masuk yang dipisahkan koma untuk lalu lintas yang tidak dialihkan ke file bantuan Envoy. Anotasi hanya berlaku saat semua traffic masuk (*) dialihkan. Nilai default ke string kosong (""). |
cloud.google.com/excludeOutboundCIDRs | Daftar rentang IP keluar yang dipisahkan koma dalam bentuk CIDR. | Traffic keluar yang menunjukkan salah satu dari IP tujuan ini dikecualikan dari intersepsi/pengalihan ke file bantuan Envoy. Lalu lintas ini akan mengabaikan proxy Envoy dan tidak akan ditangani berdasarkan Cloud Service Mesh konfigurasi Anda. Nilai defaultnya adalah "169.254.169.254/32", yang merupakan rentang yang diperlukan untuk berkomunikasi dengan server {i>metadata<i}. Perhatikan bahwa rentang ini diperlukan sehingga jika menetapkan anotasi `excludeOutboundCIDRs`, pastikan Anda juga termasuk "169.254.169.254/32" selain CIDR lainnya. Pastikan bahwa tidak ada spasi di daftar yang dipisahkan koma. |
cloud.google.com/includeOutboundCIDRs | Daftar rentang IP keluar yang dipisahkan koma dalam bentuk CIDR. | Traffic keluar yang menunjukkan salah satu IP tujuan ini disertakan dalam intersepsi/pengalihan ke file bantuan Envoy. Traffic ini diarahkan ke proxy Envoy dan ditangani sesuai dengan Cloud Service Mesh konfigurasi Anda. Nilai defaultnya adalah "169.254.169.254/32", yang merupakan rentang yang diperlukan untuk berkomunikasi dengan server {i>metadata<i}. Perhatikan bahwa rentang ini diperlukan sehingga jika menetapkan anotasi `includeOutboundCIDRs`, pastikan Anda juga termasuk "169.254.169.254/32" selain CIDR lainnya. Pastikan bahwa tidak ada spasi di daftar yang dipisahkan koma. |
cloud.google.com/enableManagedCerts | Boolean, direpresentasikan sebagai string. Misalnya: "true " |
Jika ditetapkan ke "true ", workload yang dikelola GKE
sertifikat yang ditandatangani oleh Certificate Authority Service dimasukkan dan dipasang
pada container file bantuan. Nilai defaultnya adalah "false ".
|
Meng-uninstal injektor file bantuan
Uninstal injektor file bantuan dengan perintah berikut:
kubectl delete -f specs/ kubectl label namespace default istio-injection-