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-