Episode ini memperdalam filter chain Envoy: filter HTTP seperti ext_authz dan gRPC JSON transcoder, filter TCP seperti tcp_proxy passthrough, serta cara menyusun urutan filter dan melakukan matching yang benar.

Di episode 4 dan 7, kalian sudah memasang filter HTTP router dan http_connection_manager. Episode 8 menunjukkan bahwa itu baru permukaan: filter chain lanjutan adalah kemampuan Envoy menyusun pipeline filter HTTP maupun TCP untuk mengubah cara request diproses di setiap tahap.
Kalian akan berkenalan dengan ext_authz untuk autentikasi eksternal, gRPC JSON transcoder yang mengubah REST menjadi gRPC, dan tcp_proxy untuk meneruskan traffic TCP mentah. Yang lebih penting, kalian akan paham urutan filter — karena urutan menentukan perilaku.
Semua filter HTTP memproses request di dalam pipeline yang diakhiri router:
http_filters:
- name: envoy.filters.http.cors
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.http.cors.v3.Cors
- name: envoy.filters.http.ext_authz
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.http.ext_authz.v3.ExtAuthz
transport_api_version: V3
grpc_service:
envoy_grpc:
cluster_name: auth_service
with_request_body:
max_request_bytes: 8192
- name: envoy.filters.http.router
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.http.router.v3.RouterPipeline http_filters memproses request secara berurutan: CORS menambahkan header, ext_authz menanyakan layanan otentikasi, dan router terakhir meneruskan request ke cluster. Filter yang mengubah request harus dipasang sebelum filter yang mengonsumsinya.
ext_authz mendelegasikan keputusan otorisasi ke layanan eksternal lewat gRPC. Envoy mengirim metadata request, dan layanan menjawab allow atau deny. Detail konfigurasi akan kita perdalam di episode 14, tapi intinya: filter ini tidak memutuskan sendiri, dia bertanya ke service lain.
grpc_json_transcoder mengubah request REST JSON menjadi panggilan gRPC — dan sebaliknya. Ini memungkinkan klien REST memakai backend gRPC tanpa perubahan apa pun:
http_filters:
- name: envoy.filters.http.grpc_json_transcoder
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.http.grpc_json_transcoder.v3.GrpcJsonTranscoder
proto_descriptor: /etc/envoy/api_descriptor.pb
services:
- orders.v1.OrdersService
print_options:
always_print_primitive_fields: true
- name: envoy.filters.http.router
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.http.router.v3.RouterKonfigurasi grpc_json_transcoder memakai descriptor protobuf untuk memetakan endpoint REST ke metode gRPC. Dengan print_options yang diatur, respons JSON selalu berisi field bernilai nol.
Tidak semua traffic adalah HTTP. Untuk database, Redis, atau protokol binary, pakai filter TCP:
listeners:
- name: listener_tcp
address:
socket_address:
address: 0.0.0.0
port_value: 13000
filter_chains:
- filters:
- name: envoy.filters.network.tcp_proxy
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy
stat_prefix: mysql_tcp
cluster: mysql_clusterFilter tcp_proxy meneruskan koneksi TCP mentah ke cluster tanpa mem-parsing protokol. Ini disebut passthrough: byte masuk diteruskan apa adanya, cocok untuk protokol yang tidak dipahami Envoy. Gunakan HTTP filter jika butuh routing berbasis path, dan TCP filter jika traffic berupa protokol binary.
Satu listener bisa punya beberapa filter chain yang dipilih berdasarkan karakteristik koneksi:
listeners:
- name: listener_multi
address:
socket_address:
address: 0.0.0.0
port_value: 10000
filter_chains:
- filter_chain_match:
server_names:
- api.example.com
filters:
- name: envoy.filters.network.http_connection_manager
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager
stat_prefix: api_http
route_config:
name: api_routes
virtual_hosts: []
http_filters:
- name: envoy.filters.http.router
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.http.router.v3.Router
- filter_chain_match:
server_names:
- db.internal
filters:
- name: envoy.filters.network.tcp_proxy
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy
stat_prefix: db_tcp
cluster: db_clusterMekanisme filter_chain_match memilih chain berdasarkan field seperti server_names (SNI TLS). Koneksi ke api.example.com diproses sebagai HTTP, sedangkan koneksi ke db.internal diteruskan sebagai TCP mentah.
Beberapa prinsip urutan filter yang harus kalian pegang:
router selalu terakhir untuk HTTP.curl -s localhost:9901/config_dump | grep -o '"name": "envoy.filters[^"]*"' | sort -uPerintah curl localhost:9901/config_dump menampilkan semua filter yang dimuat. Grep envoy.filters di atas menyaring nama-nama filter unik — cara cepat memverifikasi pipeline yang sedang aktif.
Untuk menutup episode ini, berikut pipeline yang menggabungkan CORS, autentikasi, dan routing:
http_filters:
- name: envoy.filters.http.cors
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.http.cors.v3.Cors
- name: envoy.filters.http.router
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.http.router.v3.RouterCatatan: pada contoh ini CORS dipasang sebelum router, sehingga header CORS sudah benar sebelum response dikirim. Urutan filter akan dibahas lebih dalam lagi saat kita menambahkan rate limiting di episode 10 dan RBAC di episode 12.
Episode 8 membuka kotak alat filter Envoy: pipeline HTTP dengan ext_authz dan gRPC JSON transcoder, TCP passthrough dengan tcp_proxy, serta matching dan urutan filter yang menentukan perilaku keseluruhan.
Inti yang harus dibawa pulang:
http_filters adalah pipeline; router selalu menempati posisi terakhir.ext_authz mendelegasikan autentikasi ke layanan gRPC eksternal.grpc_json_transcoder mengubah REST menjadi panggilan gRPC.tcp_proxy meneruskan byte mentah tanpa mem-parsing protokol.filter_chain_match memilih chain berdasarkan SNI dan karakteristik koneksi.Di episode 9 selanjutnya kita akan membahas dynamic configuration dengan xDS — prinsip LDS, RDS, CDS, EDS, dan SDS, Envoy sebagai klien xDS yang fleksibel, serta integrasi dasar dengan control plane seperti Gloo, Contour, Istio, atau server xDS custom.