Opsi untuk penyiapan Pod Google Kubernetes Engine menggunakan injeksi Envoy otomatis

Panduan ini memberikan informasi tentang opsi dan tugas tambahan untuk injektor sidecar Envoy otomatis.

Menambahkan proxy file bantuan ke workload yang ada

Setelah Anda menginstal injektor file bantuan ke cluster, proxy file bantuan otomatis dimasukkan ke pod yang baru dibuat dalam namespace yang diaktifkan. Jika Anda sudah menjalankan beban kerja sebelum mengaktifkan injektor sidecar, Anda harus memulai ulang beban kerja tersebut 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, mereka secara otomatis dibuat ulang dengan proxy file bantuan baru.

kubectl delete pod POD_NAME -n NAMESPACE

Pastikan penampung proxy file bantuan telah dimasukkan ke setiap pod Anda:

kubectl get pods -n NAMESPACE

Misalnya, dengan klien taskbox yang dibuat di atas, Anda akan melihat 2/2 pod berjalan, satu untuk aplikasiBunybox itu sendiri dan satu lagi untuk proxy file 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 sidecar 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 > AlwaysInjectSelector > AlwaysInjectSelector > Default Policy

Mengaktifkan/menonaktifkan injeksi untuk masing-masing pod tertentu

Gunakan anotasi pod berikut untuk mengaktifkan atau menonaktifkan injeksi untuk pod tertentu dalam namespace yang diaktifkan:

...
metadata:
  annotations:
    sidecar.istio.io/inject: "true" / "false"

Mengaktifkan/menonaktifkan injeksi untuk grup pod tertentu

Injektor sidecar itu sendiri dapat dikonfigurasi untuk selalu atau tidak pernah memasukkan pod dalam namespace yang diaktifkan berdasarkan array pemilih label Kubernetes. Misalnya, gunakan perintah berikut untuk mengonfigurasi injeksi 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 file bantuan 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 Traffic Director. Dalam beberapa kasus, Anda mungkin ingin mengubah perilaku ini untuk mengabaikan proxy file bantuan.

Gunakan anotasi Pod berikut untuk mengecualikan traffic dari intersepsi dan pengalihan.

Mengecualikan dari intersepsi oleh rentang alamat IP keluar

Anda dapat mengecualikan traffic agar tidak ditangkap 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 yang dipisahkan koma untuk rentang alamat IP keluar 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 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".

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 adalah daftar yang dipisahkan koma untuk rentang alamat IP keluar dalam format CIDR. Traffic keluar yang ditujukan 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 ditujukan 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 apa pun akan ditangkap dan dialihkan ke file bantuan Envoy. Hal ini sama dengan meneruskan anotasi cloud.google.com/excludeOutboundPorts dengan daftar kosong ("").

Sertakan nomor port masuk dalam intersepsi

Anda dapat menyertakan traffic 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 yang menjadi tujuan pengalihan traffic ke bantuan Envoy. Karakter pengganti * dapat digunakan untuk mengonfigurasi pengalihan untuk semua port. Nilai kosong menonaktifkan semua pengalihan masuk. Nilai defaultnya adalah string kosong ("").

Kecualikan dari intersepsi berdasarkan nomor port masuk

Anda dapat mengecualikan traffic agar tidak diintersepsi 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 bantuan Envoy. Anotasi ini hanya berlaku saat semua traffic masuk (*) sedang dialihkan. Nilai ditetapkan secara default ke string kosong ("").

Aktifkan sertifikat terkelola

Anda dapat mengaktifkan sertifikat beban kerja terkelola.

...
metadata:
  annotations:
    cloud.google.com/enableManagedCerts: "true"

Jika anotasi Pod cloud.google.com/enableManagedCerts ditetapkan ke true, sertifikat workload yang dikelola GKE yang ditandatangani oleh Certificate Authority Service akan disisipkan dan dipasang di container sidecar. Nilai anotasi ditetapkan secara default ke false.

Mengonfigurasi metadata proxy file bantuan

Untuk mendukung fitur Traffic Director tambahan, proxy file bantuan dapat mewarisi metadata spesifik dari Pod yang dienkapsulasi. Ada dua cara untuk melakukannya. Kedua opsi menambahkan metadata dan berbagi metadata dengan Traffic Director saat proxy file bantuan terhubung ke Traffic Director. Opsinya tidak dapat terjadi bersamaan.

Opsi pertama memungkinkan Anda menentukan key-value pair metadata secara individual. Misalnya, 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 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. Perhatikan bahwa anotasi cloud.google.com/proxyMetadata dan cloud.google.com/forwardPodLabels tidak dapat terjadi bersamaan. Jika Anda menetapkan keduanya, cloud.google.com/forwardPodLabels akan diprioritaskan dan cloud.google.com/proxyMetadata akan diabaikan.

Pemfilteran konfigurasi kemudian memungkinkan Traffic Director berbagi subset konfigurasi hanya dengan proxy tertentu yang cocok dengan label "version": "dev" ini.

Deployment yang ada harus dimulai ulang agar konfigurasi ini dapat diterapkan.

Anotasi pod yang didukung

Traffic Director mendukung anotasi Pod berikut untuk injeksi file bantuan. Meskipun anotasi injektor sidecar tambahan mungkin berfungsi, daftar berikut mewakili anotasi yang didukung Traffic Director. 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. Contoh: "true" Menentukan apakah file bantuan Envoy harus otomatis dimasukkan ke dalam workload.
cloud.google.com/proxyMetadata Peta JSON untuk key-value pair. Contoh: "'{"version": "dev"}'" Menentukan key-value pair dalam peta JSON yang harus ditambahkan ke metadata Envoy.
cloud.google.com/forwardPodLabels "true" atau "false" Jika disetel 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 sidecar Envoy. Traffic ini akan mengabaikan proxy Envoy dan tidak akan ditangani sesuai dengan konfigurasi Traffic Director. Default-nya adalah string kosong (yaitu "").
cloud.google.com/includeInboundPorts Daftar port masuk yang dipisahkan koma Daftar port masuk yang dipisahkan koma yang traffic-nya dialihkan ke file bantuan Envoy. Gunakan karakter pengganti `*` untuk mengonfigurasi pengalihan bagi semua port. Nilai kosong 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 sidecar Envoy. Traffic ini akan mengabaikan proxy Envoy dan tidak akan ditangani sesuai dengan konfigurasi Traffic Director. Defaultnya adalah "169.254.169.254/32", yang merupakan rentang yang diperlukan untuk berkomunikasi dengan server metadata. Perhatikan bahwa rentang ini bersifat wajib, 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 sidecar Envoy. Traffic ini diarahkan ke proxy Envoy dan ditangani sesuai dengan konfigurasi Traffic Director. 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. Contoh: "true" Jika disetel ke "true", sertifikat workload terkelola GKE yang ditandatangani oleh Certificate Authority Service akan dimasukkan dan dipasang di container sidecar. Nilai defaultnya adalah "false".

Meng-uninstal injektor bantuan

Uninstal injektor file bantuan dengan perintah berikut:

kubectl delete -f specs/
kubectl label namespace default istio-injection-