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-