Opsi untuk penyiapan Pod Google Kubernetes Engine menggunakan injeksi Envoy otomatis

Panduan ini memberi Anda informasi tentang opsi dan tugas tambahan untuk penginjek sidecar Envoy otomatis.

Menambahkan proxy sidecar ke workload yang ada

Setelah Anda menginstal injector sidecar ke cluster, proxy sidecar akan otomatis dimasukkan ke pod yang baru dibuat di namespace yang diaktifkan. Jika workload sudah berjalan sebelum mengaktifkan injector sidecar, Anda harus memulai ulang workload agar injeksi dapat dilakukan.

Untuk pod yang dikelola oleh pengontrol Deployment, DaemonSet, atau StatefulSet, Anda dapat menjalankan hal 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 pengontrol di atas untuk men-deploy pod, Anda harus menghapus pod satu per satu. Setelah itu, keduanya akan otomatis dibuat ulang dengan proxy sidecar baru.

kubectl delete pod POD_NAME -n NAMESPACE

Pastikan penampung proxy sidecar telah dimasukkan di setiap pod Anda:

kubectl get pods -n NAMESPACE

Misalnya, dengan klien busybox yang dibuat di atas, Anda akan melihat 2/2 pod berjalan, satu untuk aplikasi busybox itu sendiri dan satu untuk proxy sidecar 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 ada. Injeksi juga dapat dikonfigurasi secara selektif untuk cakupan yang berbeda agar sesuai dengan kebutuhan tertentu. Misalnya, penggantian harus digunakan untuk mencegah injeksi proxy sidecar untuk layanan gRPC tanpa proxy.

Perhatikan bahwa penggantian injeksi hanya berlaku jika namespace diaktifkan, dan berlaku dengan prioritas berikut: Pod Annotations > NeverInjectSelector > AlwaysInjectSelector > Default Policy

Mengaktifkan atau menonaktifkan injeksi untuk setiap pod tertentu

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

...
metadata:
  annotations:
    td-injection: "true" / "false"

Menyesuaikan perilaku intersepsi traffic

Secara default, semua traffic keluar dari aplikasi Anda akan dicegat dan diarahkan ke proxy sidecar Envoy. Proxy Envoy kemudian dapat menangani traffic sesuai dengan petunjuk yang diterima dari Cloud Service Mesh. Dalam beberapa kasus, Anda mungkin ingin mengubah perilaku ini untuk mengabaikan proxy sidecar.

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 menurut 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 dituju ke rentang alamat IP ini tidak dialihkan ke sidecar 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".

Menyertakan dalam intersepsi menurut rentang alamat IP keluar

Anda dapat menyertakan traffic dalam intersepsi menurut 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 dituju ke rentang alamat IP ini dialihkan ke sidecar 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 berdasarkan 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 dituju ke port ini dikecualikan dari intersepsi dan pengalihan ke sidecar Envoy.

Jika Anda tidak menentukan anotasi cloud.google.com/excludeOutboundPorts, traffic keluar yang ditujukan ke port mana pun akan dicegat dan dialihkan ke sidecar Envoy. Hal ini setara dengan meneruskan anotasi cloud.google.com/excludeOutboundPorts dengan daftar kosong ("").

Menyertakan 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 adalah daftar port masuk yang dipisahkan koma yang traffic-nya akan dialihkan ke sidecar 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 sidecar Envoy. Anotasi hanya berlaku jika semua traffic masuk (*) dialihkan. Nilai defaultnya adalah string kosong ("").

Mengaktifkan 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 yang dikelola GKE yang ditandatangani oleh Layanan Otoritas Sertifikat akan disisipkan dan dipasang di penampung sidecar. Nilai anotasi secara default adalah false.

Mengonfigurasi metadata proxy sidecar

Untuk mendukung fitur Cloud Service Mesh tambahan, proxy sidecar dapat mewarisi metadata tertentu dari Pod yang mengenkapsulasinya. Ada dua cara untuk melakukannya. Kedua opsi tersebut menambahkan metadata dan membagikan metadata ke Cloud Service Mesh saat proxy sidecar terhubung ke Cloud Service Mesh. Opsi ini bersifat mutlak.

Opsi pertama memungkinkan Anda menentukan setiap key-value pair metadata. Misalnya, sertakan anotasi berikut dalam spesifikasi template Pod Anda untuk menerapkan label "version": "dev" ke proxy sidecar 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 sidecar. Perhatikan bahwa anotasi cloud.google.com/proxyMetadata dan cloud.google.com/forwardPodLabels tidak dapat terjadi secara bersamaan. Jika Anda menetapkan keduanya, cloud.google.com/forwardPodLabels akan diprioritaskan dan cloud.google.com/proxyMetadata akan diabaikan.

Pemfilteran konfigurasi kemudian memungkinkan Cloud Service Mesh membagikan 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 injeksi sidecar. Meskipun anotasi injektor sidecar tambahan mungkin berfungsi, daftar berikut mewakili 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
td-injection Boolean, direpresentasikan sebagai string. Misalnya: "true" Menentukan apakah sidecar Envoy harus otomatis dimasukkan ke dalam workload atau tidak.
cloud.google.com/proxyMetadata Peta JSON key-value pair. Misalnya: "'{"version": "dev"}'" Menentukan key-value pair dalam 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. 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 sidecar 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 yang traffic-nya dialihkan ke sidecar 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 sidecar 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 Cloud Service Mesh. Secara default "169.254.169.254/32", yang merupakan rentang yang diperlukan untuk berkomunikasi dengan server metadata. Perhatikan bahwa rentang ini diperlukan sehingga 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 Cloud Service Mesh. Secara default "169.254.169.254/32", yang merupakan rentang yang diperlukan untuk berkomunikasi dengan server metadata. Perhatikan bahwa rentang ini diperlukan sehingga 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 Layanan Certificate Authority akan disisipkan dan dipasang di penampung sidecar. Nilai defaultnya adalah "false".

Meng-uninstal injector sidecar

Uninstal injector sidecar dengan perintah berikut:

kubectl delete MutatingWebhookConfiguration td-mutating-webhook
kubectl label namespace default td-injection-