Opsi untuk penyiapan Pod Google Kubernetes Engine menggunakan injeksi Envoy otomatis
Panduan ini memberikan informasi tentang opsi dan tugas tambahan untuk injektor sespan otomatis Envoy.
Menambahkan proxy file bantuan ke workload yang ada
Setelah Anda memasang injektor file bantuan ke cluster, proxy file bantuan secara otomatis dimasukkan ke pod yang baru dibuat dalam namespace yang diaktifkan. Jika sudah memiliki workload yang sudah berjalan sebelum mengaktifkan injektor file bantuan, Anda harus memulai ulang workload agar injeksi dilakukan.
Untuk pod yang dikelola oleh pengontrol Deployment, DaemonSet, atau StatefulSet, Anda dapat menjalankan 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 tidak menggunakan salah satu pengontrol di atas untuk men-deploy pod, Anda harus menghapus pod satu per satu. Setelah itu, parameter tersebut akan otomatis dibuat ulang dengan proxy file bantuan baru.
kubectl delete pod POD_NAME -n NAMESPACE
Pastikan container proxy file bantuan telah dimasukkan ke dalam setiap pod:
kubectl get pods -n NAMESPACE
Misalnya, dengan klien clientbox yang dibuat di atas, Anda akan melihat 2/2 pod yang berjalan, satu untuk aplikasi connectedbox itu sendiri, dan satu lagi untuk proxy bantuan Envoy yang dimasukkan:
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 tinggal. Injeksi juga dapat dikonfigurasi secara selektif untuk berbagai cakupan agar sesuai dengan kebutuhan tertentu. Misalnya, penggantian harus digunakan untuk mencegah injeksi proxy file bantuan untuk layanan gRPC tanpa proxy.
Perlu diperhatikan bahwa penggantian injeksi hanya berlaku jika namespace diaktifkan, dan berlaku dengan prioritas berikut: Pod Annotations > NeverInjeksiSelector > AlwaysInjeksiSelector > Kebijakan Default
Mengaktifkan/menonaktifkan injeksi untuk pod individual tertentu
Gunakan anotasi pod berikut untuk mengaktifkan atau menonaktifkan injeksi pod tertentu dalam namespace yang diaktifkan:
... metadata: annotations: sidecar.istio.io/inject: "true" / "false"
Mengaktifkan/menonaktifkan injeksi untuk grup pod tertentu
Injektor file bantuan itu sendiri dapat dikonfigurasi agar selalu atau tidak pernah memasukkan pod ke dalam namespace yang diaktifkan berdasarkan array pemilih label Kubernetes. Misalnya, gunakan perintah berikut untuk mengonfigurasi injektor file bantuan agar 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 yang ada harus dimulai ulang agar konfigurasi ini dapat diterapkan.
Menyesuaikan perilaku intersepsi traffic
Secara default, semua traffic keluar dari aplikasi Anda akan dicegat dan dialihkan ke proxy file bantuan Envoy. Proxy Envoy kemudian dapat menangani traffic sesuai dengan petunjuk yang diterima dari Cloud Service Mesh. Dalam beberapa kasus, Anda mungkin ingin memodifikasi perilaku ini untuk mengabaikan proxy file bantuan.
Gunakan anotasi Pod berikut untuk mengecualikan traffic dari intersepsi dan pengalihan.
Mengecualikan dari intersepsi menurut rentang alamat IP keluar
Anda dapat mengecualikan traffic dari intersepsi berdasarkan 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
adalah daftar rentang alamat IP keluar yang dipisahkan koma dalam format CIDR. Traffic keluar yang ditujukan ke rentang alamat IP ini tidak dialihkan ke file bantuan Envoy.
Perhatikan bahwa Anda perlu mencantumkan 169.254.169.254/32
dalam anotasi Pod untuk
memastikan bahwa aplikasi dapat berkomunikasi dengan server metadata. Jika Anda tidak menentukan anotasi Pod cloud.google.com/excludeOutboundCIDRs
, intersepsi traffic akan dikonfigurasi untuk mengecualikan rentang CIDR keluar "169.254.169.254/32".
Menyertakan dalam intersepsi berdasarkan 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
adalah daftar rentang alamat IP keluar yang dipisahkan koma dalam format CIDR. Traffic keluar yang ditetapkan ke rentang alamat IP ini dialihkan ke file bantuan Envoy.
Karakter pengganti *
dapat digunakan untuk mengalihkan semua traffic keluar. Daftar kosong akan menonaktifkan semua traffic keluar. Anotasi ditetapkan secara default ke *
.
Mengecualikan dari intersepsi menurut nomor port keluar
Anda dapat mengecualikan traffic dari intersepsi dan pengalihan berdasarkan nomor port keluar.
... metadata: annotations: cloud.google.com/excludeOutboundPorts: "10001, 10002"
Anotasi Pod cloud.google.com/excludeOutboundPorts
adalah daftar port keluar
yang dipisahkan koma. Traffic keluar yang ditetapkan ke port ini dikecualikan dari intersepsi dan pengalihan ke file bantuan Envoy.
Jika Anda tidak menentukan anotasi cloud.google.com/excludeOutboundPorts
, traffic keluar yang ditujukan untuk port mana pun akan dicegat dan dialihkan ke file bantuan Envoy. Tindakan ini sama dengan meneruskan
anotasi cloud.google.com/excludeOutboundPorts
dengan daftar kosong ("").
Sertakan dalam intersepsi berdasarkan nomor port masuk
Anda dapat menyertakan lalu lintas dalam intersepsi berdasarkan nomor port masuk.
... metadata: annotations: cloud.google.com/includeInboundPorts: "10001, 10002"
Anotasi Pod cloud.google.com/includeInboundPorts
adalah daftar port masuk
yang dipisahkan koma dengan traffic yang akan dialihkan ke bantuan
Envoy. Karakter pengganti *
dapat digunakan untuk mengonfigurasi pengalihan untuk semua
port. Nilai kosong akan menonaktifkan semua pengalihan masuk. Nilai defaultnya adalah string kosong ("").
Mengecualikan dari intersepsi berdasarkan nomor port masuk
Anda dapat mengecualikan traffic dari intersepsi berdasarkan nomor port masuk.
... metadata: annotations: cloud.google.com/excludeInboundPorts: "10001, 10002"
Anotasi Pod cloud.google.com/excludeInboundPorts
adalah daftar port masuk
yang dipisahkan koma yang akan dikecualikan dari pengalihan ke file bantuan Envoy. Anotasi hanya berlaku saat semua traffic masuk (*
) dialihkan. Nilai defaultnya adalah string kosong ("").
Aktifkan sertifikat terkelola
Anda dapat mengaktifkan sertifikat workload terkelola.
... metadata: annotations: cloud.google.com/enableManagedCerts: "true"
Jika cloud.google.com/enableManagedCerts
anotasi Pod ditetapkan ke true
,
sertifikat workload yang dikelola GKE yang ditandatangani oleh Certificate Authority Service
akan disisipkan dan dipasang di container file bantuan. Nilai anotasi
ditetapkan secara default ke false
.
Mengonfigurasi metadata proxy file bantuan
Untuk mendukung fitur Cloud Service Mesh tambahan, proxy file bantuan dapat mewarisi metadata tertentu dari Pod yang dienkapsulasi. Ada dua cara untuk melakukannya. Kedua opsi tersebut menambahkan metadata dan membagikan metadata dengan Cloud Service Mesh saat proxy file bantuan terhubung ke Cloud Service Mesh. Opsi-opsi tersebut sama-sama bersifat eksklusif.
Opsi pertama memungkinkan Anda menentukan key-value pair metadata individual. Misalnya, sertakan anotasi berikut dalam spesifikasi template Pod untuk
menerapkan label "version": "dev"
ke proxy file bantuan yang dimasukkannya.
... metadata: annotations: cloud.google.com/proxyMetadata: '{"version": "dev"}'
Opsi kedua menambahkan semua label Pod ke proxy sidecar yang dimasukkan Pod.
... metadata: annotations: cloud.google.com/forwardPodLabels: "true"
Jika Anda tidak menentukan anotasi cloud.google.com/forwardPodLabels
, label
Pod tidak akan ditambahkan ke proxy file bantuan. Perlu diperhatikan bahwa anotasi
cloud.google.com/proxyMetadata
dan cloud.google.com/forwardPodLabels
bersifat eksklusif satu sama lain. Jika Anda menetapkan keduanya, cloud.google.com/forwardPodLabels
akan diprioritaskan dan cloud.google.com/proxyMetadata
akan diabaikan.
Pemfilteran konfigurasi kemudian memungkinkan Cloud Service Mesh untuk membagikan subkumpulan konfigurasi hanya dengan proxy tertentu yang cocok dengan label "version": "dev"
ini.
Deployment yang sudah ada harus dimulai ulang agar konfigurasi ini dapat diterapkan.
Anotasi pod yang didukung
Cloud Service Mesh mendukung anotasi Pod berikut untuk injeksi file bantuan. Meskipun anotasi injektor file bantuan tambahan mungkin berfungsi, daftar berikut ini merepresentasikan anotasi yang didukung Cloud Service Mesh. Untuk menghindari kerusakan atau ketidakstabilan, jangan buat dependensi pada anotasi lain dalam deployment produksi Anda.
Nama Anotasi | Nilai | Deskripsi |
---|---|---|
sidecar.istio.io/inject | Boolean, direpresentasikan sebagai string. Misalnya: "true " |
Menentukan apakah file bantuan Envoy harus dimasukkan secara otomatis ke dalam workload atau tidak. |
cloud.google.com/proxyMetadata | Peta JSON untuk key-value pair. Misalnya: "'{"version":
"dev"}' "
|
Menentukan key-value pair di peta JSON yang harus ditambahkan ke metadata Envoy. |
cloud.google.com/forwardPodLabels | "true" atau "false" | Jika ditetapkan ke "true", semua label Pod akan ditambahkan ke metadata Envoy, dan anotasi "cloud.google.com/proxyMetadata" akan diabaikan. Nilai defaultnya 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. Traffic ini akan mengabaikan proxy Envoy dan tidak akan ditangani sesuai dengan konfigurasi Cloud Service Mesh. Default-nya adalah string kosong (yaitu ""). |
cloud.google.com/includeInboundPorts | Daftar port masuk yang dipisahkan koma | Daftar port masuk yang dipisahkan koma untuk traffic mana yang dialihkan ke file bantuan Envoy. Gunakan karakter pengganti `*` untuk mengonfigurasi pengalihan untuk semua port. Nilai kosong akan menonaktifkan semua pengalihan masuk. Nilai defaultnya adalah string kosong (""). |
cloud.google.com/excludeInboundPorts | Daftar port masuk yang dipisahkan koma | Daftar port masuk yang dipisahkan koma yang traffic-nya tidak dialihkan ke file bantuan Envoy. Anotasi hanya berlaku saat semua traffic masuk (*) dialihkan. Nilai defaultnya adalah string kosong (""). |
cloud.google.com/excludeOutboundCIDRs | Daftar rentang IP keluar yang dipisahkan koma dalam bentuk CIDR. | Traffic keluar yang menunjukkan salah satu IP tujuan ini dikecualikan dari intersepsi/pengalihan ke file bantuan Envoy. Traffic ini akan mengabaikan proxy Envoy dan tidak akan ditangani sesuai dengan konfigurasi Cloud Service Mesh. Defaultnya adalah "169.254.169.254/32", yang merupakan rentang yang diperlukan untuk berkomunikasi dengan server metadata. Perhatikan bahwa rentang ini wajib ada, jadi jika Anda menentukan anotasi `excludeOutboundCIDRs`, pastikan Anda juga menyertakan "169.254.169.254/32" selain CIDR lainnya. Pastikan tidak ada spasi dalam 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 konfigurasi Cloud Service Mesh. Defaultnya adalah "169.254.169.254/32", yang merupakan rentang yang diperlukan untuk berkomunikasi dengan server metadata. Perhatikan bahwa rentang ini wajib ada, jadi jika Anda menentukan anotasi `includeOutboundCIDRs`, pastikan Anda juga menyertakan "169.254.169.254/32" selain CIDR lainnya. Pastikan tidak ada spasi dalam daftar yang dipisahkan koma. |
cloud.google.com/enableManagedCerts | Boolean, direpresentasikan sebagai string. Misalnya: "true " |
Jika ditetapkan ke "true ", sertifikat workload yang dikelola GKE
yang ditandatangani oleh Certificate Authority Service akan disisipkan dan dipasang pada container file bantuan. Nilai defaultnya adalah "false ".
|
Mencopot instalasi injektor bantuan
Uninstal injektor file bantuan dengan perintah berikut:
kubectl delete -f specs/ kubectl label namespace default istio-injection-