ASMGlobalRateLimiter, Service Mesh (ASM) içinde genel kısıtlamayı yapılandıran bir Özel Kaynak Tanımıdır (CustomResourceDefinition - CRD). Bu kaynağı kullanarak hedef iş yüklerini seçebilir, genel kısıtlama hizmetine bağlanabilir ve kısıtlama kurallarını tanımlayabilirsiniz.
Yapıya genel bakış
Aşağıdaki taslak, ASMGlobalRateLimiter alanlarının iç içe yerleşimini gösterir. Zorunlu alanlar * ile işaretlenmiştir.
apiVersion: istio.alibabacloud.com/v1beta1
kind: ASMGlobalRateLimiter
metadata:
name: <name>
namespace: <namespace>
spec:
workloadSelector: * # map<string, string>
<label-key>: <label-value>
isGateway: # bool (default: false)
rateLimitService: * # RateLimitServiceConfig
host: * # string
port: * # int
timeout: # Duration
seconds: # int
nanos: # int
configs: * # GlobalRateLimiterConfig[]
- name: * # string
match: * # RatelimitMatch
vhost: * # VirtualHostMatch
name: * # string
port: # int
route: # RouteMatch
name_match: # string
header_match: # HeaderMatcher[] (deprecated in V1.19.0+)
limit: * # GlobalServiceLimitConfig
unit: * # string (SECOND | MINUTE)
quota: * # int
limit_overrides: # GlobalRateLimitOverrideConfig[] (V1.19.0+)
- request_match: * # RequestMatcher
header_match: # HeaderMatcher[]
remote_address: # RemoteAddressMatcher
query_match: # QueryParameterMatcher[]
limit: * # GlobalServiceLimitConfig
unit: * # string
quota: * # int
spec
| Alan |
Tür |
Zorunlu |
Varsayılan |
Açıklama |
| workloadSelector |
map |
Evet |
- |
Kısıtlama kuralının uygulanacağı iş yüklerini seçen etiketler. Kaynağın ad alanı kapsamında değerlendirilir. Daha fazla bilgi için bkz. Workload Selector. |
| isGateway |
bool |
Hayır |
false |
Kısıtlama kuralını ağ geçidine uygulamak için true değerini ayarlayın. |
| rateLimitService |
RateLimitServiceConfig |
Evet |
- |
Genel kısıtlama hizmetine yönelik bağlantı ayarları. |
| configs |
GlobalRateLimiterConfig[] |
Evet |
- |
Uygulanacak kısıtlama kuralları. |
RateLimitServiceConfig
| Alan |
Tür |
Zorunlu |
Varsayılan |
Açıklama |
| host |
string |
Evet |
- |
Genel kısıtlama hizmetini barındıran kümenin alan adı. |
| port |
int |
Evet |
- |
Genel kısıtlama hizmetinin gRPC bağlantı noktası. |
| timeout |
Duration |
Hayır |
- |
Mesh proxy'nin genel kısıtlama hizmetine bağlanması için zaman aşımı. seconds: <değer> ve nanos: <değer> şeklinde belirtin; burada nanos nanosaniye cinsindendir. |
GlobalRateLimiterConfig
| Alan |
Tür |
Zorunlu |
Varsayılan |
Açıklama |
| name |
string |
Evet |
- |
Kısıtlama kuralının adı. |
| match |
RatelimitMatch |
Evet |
- |
Bu kuralın uygulanması için gelen isteklerin eşleşmesi gereken kriterler. |
| limit |
GlobalServiceLimitConfig |
Evet |
- |
Eşleşen istekler için kısıtlama eşiği. |
| limit_overrides |
GlobalRateLimitOverrideConfig[] |
Hayır |
- |
Kısıtlama eşiğine yönelik istek başına geçersiz kılmalar. Eşleşen isteklerin belirli alt kümeleri için farklı sınırlar belirlemek amacıyla kullanın. Birden fazla geçersiz kılma desteklenir. ASM V1.19.0 veya sonraki sürümler gerektirir. |
RatelimitMatch
| Alan |
Tür |
Zorunlu |
Varsayılan |
Açıklama |
| vhost |
VirtualHostMatch |
Evet |
- |
Sanal ana bilgisayar eşleştirme kriterleri. |
GlobalServiceLimitConfig
| Alan |
Tür |
Zorunlu |
Varsayılan |
Açıklama |
| unit |
string |
Evet |
- |
Kısıtlama penceresi için zaman birimi. Geçerli değerler: SECOND, MINUTE. |
| quota |
int |
Evet |
- |
Zaman birimi başına izin verilen maksimum istek sayısı. |
GlobalRateLimitOverrideConfig
| Alan |
Tür |
Zorunlu |
Varsayılan |
Açıklama |
| request_match |
RequestMatcher |
Evet |
- |
Geçersiz kılınan eşiğin uygulanacağı istekleri seçme kriterleri. |
| limit |
GlobalServiceLimitConfig |
Evet |
- |
Eşleşen istekler için kısıtlama eşiği. |
VirtualHostMatch
| Alan |
Tür |
Zorunlu |
Varsayılan |
Açıklama |
| name |
string |
Evet |
- |
Eşleştirilecek sanal ana bilgisayarın adı. |
| port |
int |
Hayır |
- |
Eşleştirilecek bağlantı noktası. |
| route |
RouteMatch |
Hayır |
- |
Belirtilen bağlantı noktası için rota eşleştirme kriterleri. |
RouteMatch
| Alan |
Tür |
Zorunlu |
Varsayılan |
Açıklama |
| name_match |
string |
Hayır |
- |
Eşleştirilecek sanal hizmetteki belirli rotanın adı. |
| header_match |
HeaderMatcher[] |
Hayır |
- |
Gelen isteklere karşı eşleştirilecek üstbilgiler. Birden fazla üstbilgi desteklenir. ASM V1.19.0 ve sonraki sürümlerde kullanım dışı bırakılmıştır. Bunun yerine GlobalRateLimitOverrideConfig kullanın. |
RequestMatcher
Birden fazla alan belirttiğinizde, bir isteğin eşleşmesi için tüm kriterleri karşılaması gerekir (VE mantığı).
| Alan |
Tür |
Zorunlu |
Varsayılan |
Açıklama |
| header_match |
HeaderMatcher[] |
Hayır |
- |
İstekleri HTTP üstbilgilerine göre eşleştirir. Birden fazla üstbilgi desteklenir. |
| remote_address |
RemoteAddressMatcher |
Hayır |
- |
İstekleri kaynak IP adresine göre eşleştirir. |
| query_match |
QueryParameterMatcher[] |
Hayır |
- |
İstekleri sorgu parametrelerine göre eşleştirir. Birden fazla parametre desteklenir. |
RemoteAddressMatcher
| Alan |
Tür |
Zorunlu |
Varsayılan |
Açıklama |
| address |
string |
Evet |
- |
Eşleştirilecek kaynak IP adresi. |
| v4_prefix_mask_len |
uint32 |
Hayır |
- |
IPv4 CIDR aralığı eşleştirmesi için ön ek uzunluğu. address alanını bir IPv4 adresine ve bu alanı ön ek uzunluğuna ayarlayın (örneğin, /24 alt ağ için 24). |
| v6_prefix_mask_len |
uint32 |
Hayır |
- |
IPv6 CIDR aralığı eşleştirmesi için ön ek uzunluğu. address alanını bir IPv6 adresine ve bu alanı ön ek uzunluğuna ayarlayın. |
HeaderMatcher
Her HeaderMatcher tam olarak bir eşleştirme modu alanı (regex_match, exact_match, prefix_match, suffix_match veya present_match) belirtir.
| Alan |
Tür |
Zorunlu |
Varsayılan |
Açıklama |
| name |
string |
Hayır |
- |
Üstbilgi adı. |
| regex_match |
string |
Hayır |
- |
Üstbilgi değeri bu düzenli ifadeyle eşleşiyorsa eşleştirir. |
| exact_match |
string |
Hayır |
- |
Üstbilgi değeri bu dizeyle tam olarak aynıysa eşleştirir. |
| prefix_match |
string |
Hayır |
- |
Üstbilgi değeri bu dizeyle başlıyorsa eşleştirir. |
| suffix_match |
string |
Hayır |
- |
Üstbilgi değeri bu dizeyle bitiyorsa eşleştirir. |
| present_match |
bool |
Hayır |
- |
true: üstbilgi mevcutsa eşleştirir. false: üstbilgi mevcut değilse eşleştirir. |
| invert_match |
bool |
Hayır |
false |
true: eşleştirme sonucunu tersine çevirir -- eşleşmeyen bir istek eşleşmiş olarak kabul edilir. false: normal eşleştirme davranışı. |
QueryParameterMatcher
Her QueryParameterMatcher bir name ve tam olarak bir eşleştirme modu alanı (exact_match, prefix_match, suffix_match, regex_match, contains_match veya present_match) gerektirir.
| Alan |
Tür |
Zorunlu |
Varsayılan |
Açıklama |
| name |
string |
Evet |
- |
Sorgu parametresi adı. |
| exact_match |
string |
Hayır |
- |
Parametre değeri bu dizeyle tam olarak aynıysa eşleştirir. |
| prefix_match |
string |
Hayır |
- |
Parametre değeri bu dizeyle başlıyorsa eşleştirir. |
| suffix_match |
string |
Hayır |
- |
Parametre değeri bu dizeyle bitiyorsa eşleştirir. |
| regex_match |
string |
Hayır |
- |
Parametre değeri bu düzenli ifadeyle eşleşiyorsa eşleştirir. |
| contains_match |
string |
Hayır |
- |
Parametre değeri bu dizeyi içeriyorsa eşleştirir. |
| present_match |
bool |
Hayır |
- |
true: parametre mevcutsa eşleştirir. false olarak ayarlanamaz -- bunun yerine başka bir eşleştirme modu kullanın. |
| ignore_case |
bool |
Hayır |
- |
true: parametre değerini eşleştirirken büyük/küçük harf duyarlılığını yoksayar. |
Örnek
Bu örnekte, app: httpbin etiketiyle işaretlenen iş yüklerine gelen trafik kısıtlanır. 80 bağlantı noktasındaki httpbin.example.com sanal ana bilgisayarına yönelik istekler saniyede 10 ile sınırlanırken, x-plan: premium üstbilgisine sahip istekler için saniyede 100 gibi daha yüksek bir sınır uygulanır.
apiVersion: istio.alibabacloud.com/v1beta1
kind: ASMGlobalRateLimiter
metadata:
name: httpbin-global-ratelimit
namespace: default
spec:
workloadSelector:
app: httpbin
rateLimitService:
host: ratelimit.default.svc.cluster.local
port: 8081
timeout:
seconds: 1
configs:
- name: httpbin-ratelimit
match:
vhost:
name: httpbin.example.com
port: 80
limit:
unit: SECOND
quota: 10
limit_overrides: # Requires ASM V1.19.0+
- request_match:
header_match:
- name: x-plan
exact_match: premium
limit:
unit: SECOND
quota: 100