Vous pouvez personnaliser les en-têtes de requête et de réponse en utilisant le CustomResourceDefinition (CRD) EnvoyFilter. Le CRD EnvoyFilter vous permet de modifier directement la configuration d'un proxy Istio (Envoy). Ainsi, vous pouvez ajouter, supprimer ou modifier les en-têtes de requête ou de réponse lorsqu'une requête ou une réponse traverse le proxy.
Prérequis
L'application HTTPBin est déployée. Pour plus d'informations, consultez Déployer l'application HTTPBin.
Étape 1 : Définir un modèle de filtre Envoy
ASM vous permet de créer un filtre Envoy à l'aide d'un modèle de filtre Envoy. Un même modèle de filtre Envoy peut servir à créer plusieurs filtres Envoy, applicables à différentes charges de travail et namespaces. Cette approche rend les configurations réutilisables et améliore l'efficacité de la gestion.
Le code YAML ci-dessous présente un exemple de modèle de filtre Envoy. Pour plus d'informations, consultez Envoy Filter.
Si vous utilisez Istio 1.9 ou une version ultérieure, remplacez la valeur du champ
proxyVersionpar la version d'Istio.Si vous utilisez Istio 1.8 ou une version antérieure, remplacez la valeur du champ
proxyVersionpar la version d'Istio. De plus, dans le code YAML précédent, remplacezenvoy.filters.network.http_connection_managerparenvoy.http_connection_manager,envoy.filters.http.routerparenvoy.router, ettype.googleapis.com/envoy.extensions.filters.http.lua.v3.Luapartype.googleapis.com/envoy.config.filter.http.lua.v2.Lua.
Étape 2 : Créer un filtre Envoy à l'aide du modèle de filtre Envoy
Après avoir créé un modèle de filtre Envoy, vous devez lier ce modèle aux charges de travail ou aux namespaces. Les filtres Envoy créés à partir de ce modèle s'appliqueront uniquement aux charges de travail ou aux namespaces spécifiés. Une fois la liaison établie, ASM crée automatiquement les filtres Envoy en se basant sur le modèle.
Le filtre Envoy créé ajoute un en-tête de requête personnalisé à toute requête entrante vers la charge de travail, ainsi qu'un en-tête de réponse personnalisé à toute réponse sortante. L'exemple suivant crée un filtre Envoy nommé custom-header-filter et configure un filtre Lua pour ajouter des en-têtes de requête et de réponse. Ce filtre Envoy s'applique à toutes les charges de travail portant le libellé app: my-app.
EnvoyFilter constitue une méthode de configuration puissante mais complexe, car elle modifie directement les configurations sous-jacentes d'Envoy. Nous vous recommandons donc de bien maîtriser le modèle de configuration d'Envoy avant d'utiliser EnvoyFilter, et d'agir avec prudence afin d'éviter toute erreur potentielle. Par ailleurs, la configuration d'EnvoyFilter peut évoluer lors des mises à niveau des versions d'Istio ; veillez à respecter la compatibilité.
Étape 3 : Afficher les en-têtes de requête et de réponse personnalisés dans les journaux d'accès
ASM vous permet de personnaliser les formats de journalisation. Les expressions personnalisées des journaux d'accès peuvent extraire des valeurs issues des en-têtes de requête, des en-têtes de réponse et des valeurs intégrées d'Envoy. Pour plus d'informations, consultez Personnaliser le format des journaux d'accès.
Le tableau ci-dessous répertorie trois nouveaux champs utilisés pour afficher le contenu dans les journaux d'accès.
|
Champ |
Type |
Valeur |
|
my-x-custom-request-header |
Attribut de requête |
%REQ(x-custom-request-header)% |
|
baggage-from-request |
Attribut de requête |
%REQ(baggage)% |
|
my-x-custom-response-header |
Attribut de réponse |
%RESP(x-custom-response-header)% |
Consultez les journaux d'accès du pod HTTPBin ; vous devriez observer un contenu similaire à celui-ci :
{
"bytes_received": "0",
"bytes_sent": "490",
"duration": "1",
"istio_policy_status": "-",
"method": "GET",
"path": "/headers",
"protocol": "HTTP/1.1",
"response_code": "200",
"response_flags": "-",
"my-x-custom-request-header": "xxx",
"baggage-from-request": "x-custom-request-header=xxx",
"my-x-custom-response-header": "x-custom-request-header=xxx",
}