En mode ambient de Service Mesh (ASM), le composant Ztunnel charge sa configuration d'exécution depuis la ConfigMap ztunnel-config du namespace istio-system. Le champ config.yaml de cette ConfigMap définit les paramètres de la politique de sortie (egress), de l'observabilité L7 et d'autres configurations. Ztunnel surveille les modifications du fichier et les applique automatiquement sans redémarrage.
Configuration
La ConfigMap ztunnel-config présente la structure suivante :
apiVersion: v1
kind: ConfigMap
metadata:
name: ztunnel-config
namespace: istio-system
data:
ztunnel-config.yaml: |
l7Config:
enabled: false
egressPolicies: [ ]
|
Champ |
Type |
Obligatoire |
Description |
|
|
|
Non |
Configuration de l'observabilité L7. Si non spécifié, les valeurs par défaut s'appliquent. |
|
|
|
Non |
Règles de politique de sortie pour le trafic vers des services externes au cluster. Si vide ou non spécifié, tout le trafic sortant est autorisé par défaut. |
Les configurations EgressPolicy s'appliquent uniquement aux services externes au cluster. Les services enregistrés dans le cluster, tels que les ressources Service et ServiceEntry, ne sont pas concernés.
Exemples de configuration
Exemple 1 : Activer les journaux d'accès L7
Activez la génération des journaux d'accès L7. Ztunnel analyse le trafic HTTP et TLS et génère les journaux d'accès correspondants.
l7Config:
enabled: true
Exemple 2 : Refuser l'accès aux blocs CIDR privés
Refusez l'accès depuis tous les namespaces aux blocs CIDR privés, sans activer l'observabilité L7.
egressPolicies:
- matchCidrs:
- 10.0.0.0/8
- 172.16.0.0/12
- 192.168.0.0/16
policy: Deny
Exemple 3 : Activer les journaux d'accès L7 et un contrôle de sortie en couches
Activez les journaux d'accès L7 combinés à un contrôle de sortie en couches : autorisez le transit direct (passthrough) pour un namespace spécifique, refusez l'accès au service de métadonnées sur des ports spécifiques et refusez l'accès aux blocs CIDR privés.
l7Config:
enabled: true
egressPolicies:
# Allow passthrough for the egress-gateway namespace to prevent the fallback rule from blocking the egress proxy itself.
- namespaces:
- egress-gateway
policy: Passthrough
# Deny access to the cloud provider's metadata service on ports 80 and 443.
- matchCidrs:
- 169.254.169.254/32
- fd00:ec2::254/128
matchPorts:
- 80
- 443
policy: Deny
# Deny access to private CIDR blocks.
- matchCidrs:
- 10.0.0.0/8
- 172.16.0.0/12
- 192.168.0.0/16
- fc00::/7
policy: Deny
Détails des champs
L7Config
|
Champ |
Type |
Obligatoire |
Description |
|
|
|
Non |
Active l'observabilité du trafic L7. Valeur par défaut : |
L'observabilité L7 prend actuellement en charge uniquement la génération de journaux d'accès. La collecte de métriques au niveau des requêtes et le traçage distribué ne sont pas encore pris en charge.
Les protocoles pris en charge sont HTTP et TLS.
L'activation de cette fonctionnalité peut entraîner une surcharge de performance d'environ 5 %. Évaluez les besoins de votre charge de travail avant de l'activer.
Champs HTTP supplémentaires
Lorsque l'observabilité L7 est activée, chaque transaction de requête/réponse HTTP génère une entrée de journal d'accès distincte avec les champs supplémentaires suivants :
|
Champ |
Description |
Valeur d'exemple |
|
|
Méthode de la requête HTTP |
|
|
|
Chemin de la requête |
|
|
|
Version du protocole |
|
|
|
Hôte de la requête |
|
|
|
Code d'état de la réponse HTTP |
|
|
|
L'en-tête de requête |
|
|
|
Taille du corps de la requête en octets, par requête |
|
|
|
Taille du corps de la réponse en octets, par requête |
|
|
|
Durée totale d'une seule requête, de son envoi jusqu'à la réception de la réponse |
|
Champs TLS supplémentaires
Lorsque l'observabilité L7 est activée pour le trafic TLS (et non HTTP sur TLS), Ztunnel analyse le message de handshake ClientHello et ajoute les champs suivants à l'entrée de journal :
|
Champ |
Description |
Valeur d'exemple |
|
|
Valeur fixe |
|
|
|
L'indication du nom de serveur (SNI) issue du message ClientHello |
|
|
|
Le premier protocole de négociation de protocole de couche application (ALPN) issu du message ClientHello. Si aucun ALPN n'est spécifié, la valeur est |
|
EgressPolicy
Chaque règle EgressPolicy se compose de trois conditions de correspondance (namespaces, matchCidrs et matchPorts) ainsi que d'une action policy. Ztunnel évalue les règles de haut en bas et applique la première dont toutes les conditions correspondent.
Champ | Type | Obligatoire | Description |
|
| Non | Une liste des namespaces clients auxquels la règle s'applique. Si vide, elle correspond à tous les namespaces. |
|
| Non | Une liste de plages d'adresses IP de destination au format CIDR. Si vide, elle correspond à toutes les adresses IP de destination. Pour contrôler le trafic IPv4 et IPv6, vous devez configurer leurs plages CIDR respectives séparément. |
|
| Non | Une liste de ports de destination. Si vide, elle correspond à tous les ports. |
|
| Oui | L'action à entreprendre. Les valeurs valides sont :
|
EgressPolicyAction
Les valeurs suivantes sont disponibles pour le champ policy :
|
Valeur |
Description |
|
|
Transmet le trafic directement à l'adresse IP de destination via TCP, en contournant le proxy du mesh. |
|
|
Interrompt immédiatement la requête, l'empêchant d'atteindre la destination. |
Contraintes de configuration
Ztunnel évalue les règles dans
egressPoliciesdans l'ordre et applique la première dont les conditionsnamespaces,matchCidrsetmatchPortscorrespondent toutes. Les règles suivantes sont ignorées.Le champ
namespacescorrespond au namespace du client (la source de la requête), et non au namespace du service de destination.Le champ
matchCidrscorrespond à l'adresse IP de destination, et non au nom de domaine. Pour contrôler le trafic basé sur les noms de domaine, vous devez enregistrer le service externe en tant queServiceEntrydans le mesh.Le champ
matchPortscorrespond au port de destination (le port distant de la requête), et non au port source du client.Si une requête ne correspond à aucune règle dans
egressPolicies, l'action par défaut estPassthrough.Ztunnel charge automatiquement les modifications de configuration via la surveillance des fichiers, sans nécessiter de redémarrage du pod. Si le format de la configuration est invalide, Ztunnel conserve la dernière configuration valide connue.