Tüm Ürünler
Search
Belge Merkezi

Alibaba Cloud Service Mesh:CustomLocalReply plug-in

Son Güncelleme:Oct 07, 2026

Bir ASM ağ geçidi veya sidecar proxy bir isteği engellediğinde ve bu isteği upstream hizmete iletmeden doğrudan bir HTTP yanıtı döndürdüğünde, varsayılan yanıt gövdesi not found veya RBAC: Access Denied gibi genel bir mesaj olur. CustomLocalReply plug-in, bu varsayılan yanıtları özel durum kodları, başlıklar ve gövde içeriğiyle değiştirir. Böylece eski URL'leri yönlendirebilir, markalı hata sayfaları sunabilir veya mesh içindeki API hata formatlarını standartlaştırabilirsiniz.

Senaryolar

Amacınız... Bkz.
Eski URL'leri yeni bir konuma yönlendirmek 404 hatasını başka bir URL'ye yönlendirme
Düz metin yerine markalı bir HTML hata sayfası döndürmek Özel 403 sayfası döndürme
API hata yanıtlarını JSON formatında standartlaştırmak JSON hata yanıtı döndürme

Yerel yanıtların oluşturulma durumu

ASM, aşağıdaki durumlarda upstream hizmeti atlayarak yerel bir yanıt oluşturur:

Tetikleyici Varsayılan durum kodu Varsayılan gövde
İstekle eşleşen bir yönlendirme kuralı bulunmuyor 404 not found
Bir yetkilendirme ilkesi isteği reddediyor 403 RBAC: Access Denied
Sanal hizmette bir directResponse yapılandırılmış Kullanıcı tanımlı Kullanıcı tanımlı

CustomLocalReply plug-in, bu yanıtlar downstream hizmete ulaşmadan önce onları yakalar ve sizin belirlediğiniz geçersiz kılmaları uygular.

Ön koşullar

Başlamadan önce aşağıdakileri yaptığınızdan emin olun:

Yapılandırma referansı

Üst düzey alanlar

Alan Tür Gerekli Geçerli değerler Açıklama
patch_context String Evet GATEWAY, SIDECAR_INBOUND Çalıştırma bağlamı. Bir ASM ağ geçidi için GATEWAY veya bir sidecar proxy için SIDECAR_INBOUND olarak ayarlayın.
custom_error_pages CustomErrorPage[] Evet -- Hata sayfası geçersiz kılma listesi. Her giriş, yerel olarak oluşturulan bir durum kodunu özel bir yanıtla eşleştirir.

CustomErrorPage alanları

Alan Tür Gerekli Varsayılan Açıklama
match_status_code Integer Evet -- Yakalanacak yerel olarak oluşturulan durum kodu. Ağ geçidi veya sidecar bu kodu oluşturduğunda aşağıdaki geçersiz kılma uygulanır.
return_status_code Integer Evet -- Eşleşen kod yerine downstream hizmete döndürülen durum kodu.
content_type String Evet -- content-type yanıt başlığı değeri (örneğin, text/html; charset=UTF-8 veya application/json).
headers Map[string]string Hayır null Özel yanıtta dahil edilecek ek yanıt başlıkları.
body String Evet -- Downstream hizmete döndürülen yanıt gövdesi.

404 hatasını başka bir URL'ye yönlendirme

Bu örnek, bir directResponse kuralı tarafından oluşturulan 404 yanıtını yakalar ve bunu bir 301 yönlendirmesine dönüştürür.

Adım 1: Doğrudan yanıt içeren bir VirtualService dağıtma

Aşağıdaki VirtualService'i ASM örneğinize uygulayın. Bu yapılandırma, tüm istekler için not found gövdesiyle birlikte 404 durum kodu döndürecek şekilde ağ geçidini yapılandırır.

apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
  name: httpbin
  namespace: default
spec:
  gateways:
    - httpbin-gateway
  hosts:
    - '*'
  http:
    - directResponse:
        body:
          string: not found
        status: 404

Adım 2: CustomLocalReply plug-in'ini etkinleştirme

Aşağıdaki plug-in yapılandırmasını ingressgateway adlı ASM giriş ağ geçidine uygulayın. Bu yapılandırma 404 durum kodunu eşleştirir ve onu https://www.aliyun.com adresine yapılan bir 301 yönlendirmesiyle değiştirir.

patch_context: GATEWAY
custom_error_pages:
  - match_status_code: 404
    return_status_code: 301
    headers:
      location: 'https://www.aliyun.com'
    content_type: text/html; charset=UTF-8
    body: moved

Yönlendirmeyi doğrulama

Bir tarayıcı açın ve ASM ağ geçidi IP adresine gidin. Tarayıcı https://www.aliyun.com adresine yönlendirilir; bu da plug-in yapılandırmasının etkin olduğunu gösterir.

Özel 403 sayfası döndürme

Bu örnek, bir yetkilendirme ilkesi isteği reddettiğinde varsayılan RBAC: Access Denied mesajını markalı bir HTML hata sayfasıyla değiştirir.

Aşağıdaki plug-in yapılandırmasını ingressgateway adlı ASM giriş ağ geçidine uygulayın:

patch_context: GATEWAY
custom_error_pages:
  - match_status_code: 403
    return_status_code: 403
    content_type: text/html; charset=UTF-8
    body: |
      <!DOCTYPE html>
      <html>
      <head><title>Access Denied</title></head>
      <body>
        <h1>403 - Access Denied</h1>
        <p>You do not have permission to access this resource.
           Contact your administrator if you believe this is an error.</p>
      </body>
      </html>

Bir yetkilendirme ilkesi isteği reddettiğinde, ağ geçidi düz metin RBAC: Access Denied mesajı yerine bu HTML sayfasını döndürür.

JSON hata yanıtı döndürme

Bu örnek, 404 yanıtları için yapılandırılmış bir JSON hata gövdesi döndürür. Bu yaklaşım, tutarlı bir hata formatı gerektiren API hizmetleri için kullanışlıdır.

Aşağıdaki plug-in yapılandırmasını ingressgateway adlı ASM giriş ağ geçidine uygulayın:

patch_context: GATEWAY
custom_error_pages:
  - match_status_code: 404
    return_status_code: 404
    content_type: application/json
    body: |
      {
        "error": {
          "code": 404,
          "message": "The requested resource was not found.",
          "status": "NOT_FOUND"
        }
      }

Ağ geçidi bir 404 yanıtı oluşturduğunda, downstream hizmet düz metin not found mesajı yerine standartlaştırılmış bir hata yapısına sahip JSON gövdesi alır.

Tek bir yapılandırmada birden çok geçersiz kılma

Tek bir plug-in yapılandırmasında farklı durum kodlarını işlemek için custom_error_pages içinde birden çok giriş tanımlayın. Aşağıdaki örnek hem 404 hem de 403 yanıtlarını geçersiz kılar:

patch_context: GATEWAY
custom_error_pages:
  - match_status_code: 404
    return_status_code: 404
    content_type: application/json
    body: |
      {
        "error": {
          "code": 404,
          "message": "The requested resource was not found.",
          "status": "NOT_FOUND"
        }
      }
  - match_status_code: 403
    return_status_code: 403
    content_type: application/json
    body: |
      {
        "error": {
          "code": 403,
          "message": "Access denied by authorization policy.",
          "status": "FORBIDDEN"
        }
      }