ASMCompressor est une définition de ressource personnalisée (CRD) qui configure la compression HTTP pour les communications inter-services et le trafic de passerelle dans Service Mesh (ASM). Elle prend en charge les algorithmes Gzip et Brotli.
Fonctionnement de la compression
Lorsque vous appliquez une ressource ASMCompressor, ASM injecte un filtre de compression dans le proxy sidecar Envoy des charges de travail sélectionnées. Ce filtre inspecte les en-têtes des requêtes et des réponses pour déterminer s'il doit compresser le contenu.
La compression s'applique lorsque toutes les conditions suivantes sont remplies :
Le type de contenu correspond à l'un des types MIME configurés.
La longueur du contenu atteint le seuil minimal défini.
Aucun en-tête Content-Encoding n'est déjà présent.
La compression des réponses est activée par défaut. La compression des requêtes est désactivée par défaut et doit être configurée explicitement via request_direction_config.
Exemple
La ressource ASMCompressor suivante active la compression Gzip sur les réponses pour les charges de travail portant le libellé app: httpbin, sur le port de service 8080 :
apiVersion: istio.alibabacloud.com/v1
kind: ASMCompressor
metadata:
name: httpbin-compressor
namespace: default
spec:
workloadSelector:
app: httpbin
portNumber: 8080
compressor_library:
gzip:
compression_level: DEFAULT
window_bits: 12
memory_level: 5
response_direction_config:
common_config:
min_content_length: 256
content_type:
- application/json
- text/html
- text/plain
disable_on_etag_header: true
Champs ASMCompressor
| Champ |
Type |
Obligatoire |
Description |
Par défaut |
workloadSelector |
map\ |
Oui |
Libellés permettant de sélectionner les pods sur lesquels appliquer la compression. La portée des libellés est limitée au namespace de la ressource ASMCompressor. Pour plus d'informations, consultez WorkloadSelector. |
-- |
isGateway |
bool |
Non |
Définissez cette valeur sur true pour appliquer cette configuration à une passerelle plutôt qu'aux proxies sidecar. |
false |
portNumber |
int |
Oui |
Port de service sur lequel appliquer la compression. Pour les passerelles, il s'agit du port de service de la passerelle. |
-- |
compressor_library |
CompressorLibrary |
Non |
Paramètres de l'algorithme de compression pour Gzip ou Brotli. |
-- |
request_direction_config |
RequestDirectionConfig |
Non |
Comportement de la compression pour les requêtes. |
-- |
response_direction_config |
ResponseDirectionConfig |
Non |
Comportement de la compression pour les réponses. |
-- |
per_route_configs |
ASMCompressorPerRouteConfig |
Non |
Remplacements de la compression au niveau des routes. Pris en charge depuis ASM V1.21. |
-- |
Champs CompressorLibrary
| Champ |
Type |
Obligatoire |
Description |
Par défaut |
gzip |
GzipCompressor |
Non |
Paramètres de compression Gzip. |
-- |
brotli |
BrotliCompressor |
Non |
Paramètres de compression Brotli. |
-- |
Champs GzipCompressor
| Champ |
Type |
Obligatoire |
Description |
Par défaut |
window_bits |
int |
Non |
Taille de la fenêtre pour le tampon de compression. Valeurs valides : 9 à 15. Des valeurs plus élevées améliorent le taux de compression mais augmentent l'utilisation de la mémoire. |
12 |
compression_level |
string |
Non |
Compromis entre le taux de compression et la vitesse. Valeurs valides : BEST (taux le plus élevé, plus lent), SPEED (taux le plus faible, plus rapide), DEFAULT (équilibré). |
DEFAULT |
memory_level |
int |
Non |
Mémoire allouée à l'état de compression interne. Valeurs valides : 1 à 9. Des valeurs plus élevées accélèrent la compression et améliorent la qualité de sortie, mais augmentent l'utilisation de la mémoire. |
5 |
compression_strategy |
string |
Non |
Stratégie de compression zlib. Choisissez-la en fonction des caractéristiques des données à compresser. Pour plus d'informations, consultez Stratégies de compression. |
DEFAULT_STRATEGY |
Stratégies de compression
| Valeur |
Description |
DEFAULT_STRATEGY |
Sélectionnée automatiquement par zlib en fonction des caractéristiques des données d'entrée. Convient à la plupart des cas d'utilisation. |
FILTERED |
Optimisée pour les données prétraitées par un filtre. Généralement utilisée pour la compression multipasse afin d'augmenter le taux de compression. |
HUFFMAN_ONLY |
Utilise uniquement le codage de Huffman sans l'algorithme LZ77. Stratégie la plus rapide avec le taux de compression le plus faible. |
RLE |
Codage par plages (Run-Length Encoding). Idéal pour les données contenant de longues séquences d'octets répétés. |
FIXED |
Utilise un dictionnaire de compression fixe et prédéfini. Utile lorsque les données suivent des schémas connus et prévisibles. |
Champs BrotliCompressor
| Champ |
Type |
Obligatoire |
Description |
Par défaut |
window_bits |
int |
Non |
Taille de la fenêtre pour le tampon de compression. Valeurs valides : 10 à 24. Des valeurs plus élevées améliorent le taux de compression mais augmentent l'utilisation de la mémoire. |
18 |
quality |
int |
Non |
Niveau de qualité de la compression. Valeurs valides : 0 à 11. Des valeurs plus élevées produisent une sortie plus petite, mais la compression prend plus de temps. |
3 |
Champs RequestDirectionConfig
| Champ |
Type |
Obligatoire |
Description |
Par défaut |
common_config |
CommonConfig |
Non |
Comportement du filtre pour la compression des requêtes. |
-- |
Champs ResponseDirectionConfig
| Champ |
Type |
Obligatoire |
Description |
Par défaut |
common_config |
CommonConfig |
Non |
Comportement du filtre pour la compression des réponses. |
-- |
disable_on_etag_header |
bool |
Non |
Si la valeur est true, la compression est ignorée lorsque la réponse inclut un en-tête ETag. Cela permet de préserver l'ETag à des fins de mise en cache. |
false |
remove_accept_encoding_header |
bool |
Non |
Si la valeur est true, l'en-tête Accept-Encoding est supprimé de la requête avant d'être transféré au service amont. Cela empêche le service amont de compresser la réponse, de sorte que le filtre Envoy gère la compression. |
false |
Champs CommonConfig
| Champ |
Type |
Obligatoire |
Description |
Par défaut |
min_content_length |
int |
Non |
Taille minimale du corps de la réponse en octets pour déclencher la compression. Les réponses très petites peuvent ne pas bénéficier de la compression. Pour Gzip, un coût CPU plus élevé s'accompagne de meilleurs taux de compression ; testez donc différents seuils pour équilibrer les performances et la bande passante. |
-- |
content_type |
string[] |
Non |
Types MIME éligibles à la compression. Seules les réponses dont le Content-Type correspond à une entrée de cette liste sont compressées. |
Voir ci-dessous |
Valeurs par défaut de content_type :
application/javascript, application/json, application/xhtml+xml, image/svg+xml, text/css, text/html, text/plain, text/xml
Champs ASMCompressorPerRouteConfig
La configuration par route remplace les paramètres de compression globaux pour des routes spécifiques. Par exemple, vous pouvez désactiver la compression sur une route de vérification d'état tout en la maintenant activée pour tout autre trafic.
| Champ |
Type |
Obligatoire |
Description |
Par défaut |
route_match |
RouteConfigurationMatch |
Oui |
Sélectionne la route à laquelle ce remplacement s'applique. |
-- |
disabled |
bool |
Oui |
Définissez cette valeur sur true pour désactiver la compression sur la route correspondante. |
false |
Champs RouteConfigurationMatch
| Champ |
Type |
Obligatoire |
Description |
Par défaut |
portNumber |
uint32 |
Non |
Correspond à un port de service spécifique ou à un port de serveur spécifique dans la Gateway. Si omis, tous les ports sont concernés. |
-- |
portName |
string |
Non |
Correspondance basée sur le portName d'un serveur dans la Gateway. S'applique uniquement lorsque la politique de compression cible une passerelle. |
-- |
gateway |
string |
Non |
Gateway à faire correspondre, au format namespace/name. S'applique uniquement lorsque la politique de compression cible une passerelle. Utilisez-le avec portName et portNumber pour sélectionner un serveur spécifique au sein de la Gateway. |
-- |
vhost |
CommonVirtualHostMatch |
Non |
Correspond à un hôte virtuel spécifique. |
-- |
name |
string |
Non |
Nom de la configuration de route Envoy à faire correspondre. Nécessite une bonne connaissance de la configuration Envoy sous-jacente. |
-- |
Champs CommonVirtualHostMatch
| Champ |
Type |
Obligatoire |
Description |
Par défaut |
name |
string |
Non |
Nom de l'hôte virtuel généré par le plan de contrôle, au format host:port. La valeur host correspond au champ host du VirtualService associé ou au nom de domaine complet (FQDN) du service dans le cluster. |
-- |
route |
CommonRouteMatch |
Non |
Correspond à une route spécifique au sein de l'hôte virtuel. |
-- |
Champs CommonRouteMatch
| Champ |
Type |
Obligatoire |
Description |
Par défaut |
name |
string |
Non |
Nom de la route à faire correspondre. Les routes générées par défaut sont nommées default. Si un VirtualService est configuré, utilisez le nom de la route HTTP définie dans le VirtualService. |
-- |
action |
string |
Non |
Correspond aux routes par type d'action. Valeurs valides : ROUTE, REDIRECT, DIRECT_RESPONSE, ANY. |
ANY |