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-