All Products
Search
Document Center

Alibaba Cloud Service Mesh:Sesuaikan header permintaan dan respons dengan VirtualService

Last Updated:Mar 12, 2026

Saat mengarahkan lalu lintas melalui service mesh, Anda sering perlu menyisipkan tracing ID, menerapkan kebijakan keamanan, atau meneruskan metadata antar layanan. Service Mesh (ASM) mendukung manipulasi Header HTTP pada tingkat rute melalui bidang headers dari CustomResourceDefinition (CRD) VirtualService. Anda dapat menambahkan, menimpa, atau menghapus header baik pada permintaan maupun respons tanpa mengubah kode aplikasi.

Prasyarat

Sebelum memulai, pastikan Anda telah:

Referensi operasi header

VirtualService menyediakan tiga operasi untuk memanipulasi header:

Operasi

Bidang YAML

Perilaku

Jenis nilai

add

headers.request.add / headers.response.add

Menambahkan header yang ditentukan dengan nilai yang diberikan. Jika header tersebut tidak ada, header akan dibuat.

map<string, string>

set

headers.request.set / headers.response.set

Menimpa nilai header. Membuat header jika belum ada.

map<string, string>

remove

headers.request.remove / headers.response.remove

Menghapus header sepenuhnya.

string[]

Nilai header statis dan dinamis

Nilai header dapat berupa string statis atau operator perintah Envoy dinamis yang diapit oleh simbol %. Misalnya, %UPSTREAM_CLUSTER% menunjukkan nama penyedia layanan. Semua operator perintah HTTP yang digunakan untuk log akses dapat ditentukan dalam header permintaan atau respons kustom.

Variabel

Deskripsi

%START_TIME%

Timestamp saat permintaan dimulai

%UPSTREAM_CLUSTER%

Nama kluster layanan upstream

Konfigurasi manipulasi header

Konfigurasi VirtualService berikut menunjukkan ketiga operasi tersebut pada header permintaan maupun respons:

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: httpbin-vs
spec:
  gateways:
    - httpbin
  hosts:
    - '*'
  http:
  - route:
    - destination:
        host: httpbin
        port:
          number: 8000
      weight: 100
    headers:
      request:
        add:
          x-custom-request-header: "custom-value"       # Tambahkan nilai statis
          x-dynamic-request-header: "%START_TIME%"       # Tambahkan nilai dinamis
        set:
          x-another-request-header: "another-value"      # Timpa atau buat
        remove:
          - x-unwanted-header                            # Hapus sepenuhnya
      response:
        add:
          x-custom-response-header: "custom-response-value"
        set:
          x-another-response-header: "another-response-value"
        remove:
          - x-unwanted-response-header

Konfigurasi ini menerapkan perubahan berikut:

Header permintaan

  • Menambahkan x-custom-request-header dengan nilai statis custom-value.

  • Menambahkan x-dynamic-request-header dengan timestamp awal permintaan, yang diselesaikan saat waktu proses dari %START_TIME%.

  • Menimpa x-another-request-header dengan nilai another-value. Jika header ini tidak ada, header akan dibuat.

  • Menghapus x-unwanted-header.

Header respons

  • Menambahkan x-custom-response-header dengan nilai custom-response-value.

  • Menimpa x-another-response-header dengan nilai another-response-value. Jika header ini tidak ada, header akan dibuat.

  • Menghapus x-unwanted-response-header.

Catatan

CRD VirtualService dapat digunakan untuk mengatur dan memodifikasi Header HTTP. Namun, log akses Envoy tidak mencatat perubahan ini jika Envoy mempertahankan konfigurasi default log akses. Jika Anda ingin mencatat header kustom dalam log akses Envoy, Anda harus mengubah format log Envoy.

Verifikasi header kustom dalam log akses

ASM memungkinkan Anda menyesuaikan format log. Ekspresi kustom log akses dapat memperoleh nilai dari header permintaan, header respons, dan nilai bawaan Envoy. Untuk petunjuknya, lihat Sesuaikan format log akses.

Tambahkan bidang berikut ke format log akses Anda:

Nama bidang

Jenis

Ekspresi format log

my-x-custom-request-header

Atribut permintaan

%REQ(x-custom-request-header)%

my-x-dynamic-request-header

Atribut permintaan

%REQ(x-dynamic-request-header)%

my-x-custom-response-header

Atribut respons

%RESP(x-custom-response-header)%

Peringatan

Header respons yang dimodifikasi oleh VirtualService mungkin tidak muncul dalam log akses jika Envoy menerapkan modifikasi tersebut setelah langkah pencatatan log dalam rantai filter-nya. Ini merupakan perilaku yang diharapkan, bukan kesalahan konfigurasi. Lihat contoh Pod HTTPBin di bawah ini.

Setelah Anda memperbarui format log, periksa log akses baik pada Pod gerbang maupun Pod HTTPBin.

Log akses Pod gerbang

Pod gerbang menangkap modifikasi header permintaan maupun respons:

{
    "bytes_received": "9",
    "bytes_sent": "33",
    "response_code": "200",
    "my-x-custom-request-header": "custom-value",
    "my-x-dynamic-request-header": "2024-01-16T14:49:21.187Z",
    "my-x-custom-response-header": "custom-response-value"
}

Log akses Pod HTTPBin

Sidecar HTTPBin tidak menangkap header respons yang ditambahkan oleh VirtualService karena modifikasi terjadi setelah titik pencatatan log sidecar. Bidang my-x-custom-response-header menampilkan -:

{
    "bytes_received": "9",
    "bytes_sent": "33",
    "response_code": "200",
    "my-x-custom-request-header": "custom-value",
    "my-x-dynamic-request-header": "2024-01-16T14:49:21.187Z",
    "my-x-custom-response-header": "-"
}