Service Mesh (ASM) utilise une définition de ressource personnalisée (CRD) nommée IstioGateway (apiVersion: istio.alibabacloud.com/v1beta1) pour gérer les passerelles de manière déclarative. Un contrôleur intégré surveille les modifications apportées à cette CRD et réconcilie les ressources Service, Deployment et ServiceAccount correspondantes dans le cluster Kubernetes où s'exécute le contrôleur.
Cette rubrique présente la référence des champs CRD, des exemples de configuration ainsi que les définitions de structures Go pour les passerelles ASM.
Prérequis
Ajoutez un cluster Container Service for Kubernetes (ACK) à votre instance ASM. Pour plus d'informations, consultez la rubrique Ajouter un cluster à une instance ASM.
Déployez les passerelles ASM dans l'espace de noms istio-system. La passerelle lit sa configuration depuis cet espace de noms au démarrage. Si vous utilisez Istio version 1.6 ou ultérieure et que vous déployez la passerelle dans un autre espace de noms, celle-ci ne parviendra pas à démarrer car elle ne pourra pas récupérer la configuration requise.
Exemples de configuration
Passerelle d'entrée minimale
Le fichier YAML suivant crée une passerelle d'entrée de base avec des limites de ressources par défaut :
apiVersion: istio.alibabacloud.com/v1beta1
kind: IstioGateway
metadata:
name: my-ingressgateway
namespace: istio-system
spec:
gatewayType: ingress
clusterIds:
- <your-cluster-id>
ports:
- name: http2
port: 80
targetPort: 80
- name: https
port: 443
targetPort: 443
replicaCount: 1
serviceType: LoadBalancer
serviceAnnotations:
service.beta.kubernetes.io/alicloud-loadbalancer-address-type: internet
Remplacez <your-cluster-id> par l'identifiant réel d'un cluster géré par votre instance ASM.
Passerelle d'entrée complète
Cet exemple inclut des champs facultatifs tels que les variables d'environnement, les libellés de pod, les limites de ressources, les paramètres de mise à jour progressive et les substitutions par cluster :
Afficher le fichier YAML
apiVersion: istio.alibabacloud.com/v1beta1
kind: IstioGateway
metadata:
name: myexample-customingressgateway
namespace: istio-system
spec:
clusterIds:
- <cluster-id-1>
- <cluster-id-2> # Deploy the gateway across multiple clusters
cpu:
targetAverageUtilization: 80
env:
- name: envname1
value: envvalue1
externalTrafficPolicy: Local
gatewayType: ingress
podLabels:
key1: value1
ports:
- name: status-port
port: 15020
targetPort: 15020
- name: http2
port: 80
targetPort: 80
- name: https
port: 443
targetPort: 0
- name: tls
port: 15443
targetPort: 15443
replicaCount: 1
resources:
limits:
cpu: '2'
memory: 2G
requests:
cpu: 200m
memory: 256Mi
# configVolumes:
# - name: config-volume-lua
# configMapName: lua-libs
# mountPath: /var/lib/lua
# secretVolumes:
# - name: myexample-customingressgateway-certs
# secretName: istio-myexample-customingressgateway-certs
# mountPath: /etc/istio/myexample-customingressgateway-certs
serviceType: LoadBalancer
serviceAnnotations:
service.beta.kubernetes.io/alicloud-loadbalancer-address-type: internet
serviceLabels:
serviceLabelKey1: serviceLabelValue1
podAnnotations:
podAnnotationsKey1: podAnnotationsValue1
rollingMaxSurge: "100%"
rollingMaxUnavailable: "25%"
overrides:
<cluster-id-1>:
replicaCount: 1
resources:
limits:
cpu: '2'
memory: 2G
requests:
cpu: 200m
memory: 256Mi
serviceAnnotations:
service.beta.kubernetes.io/alicloud-loadbalancer-address-type: internet
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-spec: slb.s1.small
<cluster-id-2>:
replicaCount: 2
resources:
limits:
cpu: '4'
memory: 4G
requests:
cpu: 400m
memory: 512Mi
serviceAnnotations:
service.beta.kubernetes.io/alicloud-loadbalancer-address-type: internet
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-spec: slb.s2.small
Pour gérer la passerelle d'entrée par programmation à l'aide d'un client Go, consultez la section Structures Go pour une passerelle ASM .
Passerelle de sortie
Une passerelle de sortie achemine tout le trafic sortant du maillage. Le champ serviceType est généralement défini sur ClusterIP car aucun équilibreur de charge externe n'est nécessaire.
Afficher le fichier YAML
apiVersion: istio.alibabacloud.com/v1beta1
kind: IstioGateway
metadata:
name: egressgateway
namespace: istio-system
spec:
autoCreateGatewayYaml: false
clusterIds:
- <your-cluster-id>
disableContainerPortExposed: true
dnsPolicy: ClusterFirst
gatewayType: egress
hostNetwork: false
podLabels:
security.istio.io/tlsMode: istio
ports:
- name: http-0
port: 80
protocol: HTTP
targetPort: 80
- name: https-1
port: 443
protocol: HTTPS
targetPort: 443
readinessProbe: {}
replicaCount: 1
resources:
limits:
cpu: '2'
memory: 4G
requests:
cpu: 200m
memory: 256Mi
rollingMaxSurge: 25%
rollingMaxUnavailable: 25%
runAsRoot: true
serviceType: ClusterIP
Créer une passerelle depuis la console
Connectez-vous à la console ASM. Dans le volet de navigation de gauche, sélectionnez Service Mesh > Mesh Management.
Sur la page Mesh Management, cliquez sur le nom de l'instance ASM.
Dans le volet de navigation de gauche, sélectionnez ASM Gateways > Ingress Gateway (ou Egress Gateway).
Cliquez sur Create from YAML.
Sur la page Create, saisissez un nom dans le champ Name, choisissez istio-system dans la liste déroulante Namespace, collez la configuration YAML, puis cliquez sur Create.
Vérifier la passerelle
Après avoir créé la passerelle, vérifiez que le service et les pods sont en cours d'exécution.
Connectez-vous à la console ACK. Dans le volet de navigation, cliquez sur Clusters.
Cliquez sur le nom du cluster. Dans le volet de gauche, sélectionnez Network > Services.
Sélectionnez istio-system dans la liste déroulante Namespace et vérifiez que le service de la passerelle existe.
Dans le volet de gauche, sélectionnez Workloads > Pods. Sélectionnez istio-system dans la liste déroulante Namespace et vérifiez que les pods de la passerelle sont en cours d'exécution.
Référence des champs CRD
Champs principaux
| Champ | Type | Description | Valeur par défaut |
|---|---|---|---|
metadata.name | string | Nom de la passerelle ASM. Le service Kubernetes et le déploiement générés portent tous deux le nom istio-{metadata.name}. | Aucune |
metadata.namespace | string | Espace de noms de la passerelle ASM. Le service et le déploiement générés résident dans cet espace de noms. Important Doit être | istio-system |
gatewayType | string | Type de passerelle. Valeurs valides : ingress (achemine le trafic entrant) et egress (achemine le trafic sortant). | ingress |
clusterIds | string[] | Identifiants des clusters dans lesquels déployer la passerelle. Chaque cluster doit être géré par l'instance ASM actuelle. | Aucune |
Configuration du service
| Champ | Type | Description | Valeur par défaut |
|---|---|---|---|
serviceType | string | Type de service Kubernetes. Valeurs valides : LoadBalancer, NodePort, ClusterIP. Pour les passerelles de sortie, ce champ est généralement défini sur ClusterIP. Important Si vous utilisez un cluster enregistré et définissez cette valeur sur | LoadBalancer |
loadBalancerClass | string | Classe d'équilibreur de charge (loadBalancerClass) du service. Valide uniquement lorsque serviceType est défini sur LoadBalancer. Nécessite ASM v1.18 ou version ultérieure. Pour plus d'informations, consultez la rubrique Associer une instance NLB à une passerelle d'entrée. | Aucune |
externalTrafficPolicy | string | Détermine si le trafic entrant est acheminé vers des points de terminaison locaux au nœud ou à l'ensemble du cluster. Valeurs valides : Cluster, Local. S'applique uniquement aux passerelles d'entrée. | Cluster |
serviceAnnotations | map[string]string | Annotations du service de la passerelle. S'applique uniquement aux passerelles dont le champ serviceType est défini sur LoadBalancer. Généralement non configuré pour les passerelles de sortie. Pour connaître les annotations courantes, consultez la rubrique Utiliser des annotations pour configurer l'équilibrage de charge. | Aucune |
serviceLabels | map[string]string | Libellés du service de la passerelle. | Aucune |
ports | ServicePort[] | Ports de service exposés par la passerelle. Chaque entrée comprend les champs name, port, targetPort et, éventuellement, protocol. Remarque Dans les versions antérieures à 1.9.7.107, définissez | Aucune |
Configuration des pods
| Champ | Type | Description | Valeur par défaut |
|---|---|---|---|
replicaCount |
int32 | Nombre de réplicas de pod. | 1 |
resources |
ResourceRequirements | Demandes et limites de ressources CPU et mémoire. | limits: cpu 2, memory 2G ; requests: cpu 200m, memory 256Mi |
env |
EnvVar[] | Variables d'environnement injectées dans le conteneur de la passerelle. | Aucune |
podLabels |
map[string]string | Libellés du pod de la passerelle. | Aucune |
podAnnotations |
map[string]string | Annotations du pod de la passerelle. | Aucune |
nodeSelector |
map[string]string | Libellés de nœuds utilisés pour planifier le pod de la passerelle sur des nœuds spécifiques. | Aucune |
affinity |
Affinity | Règles d'affinité de nœud pour la planification du pod de la passerelle. Pour plus d'informations, consultez la documentation Affinité et anti-affinité. | Aucune |
tolerations |
Toleration[] | Tolérances permettant au pod de la passerelle d'être planifié sur des nœuds présentant des taints correspondants. Pour plus d'informations, consultez la documentation Taints et Tolérations. | Aucune |
hostNetwork |
bool | Indique si le pod de la passerelle partage l'espace de noms réseau de l'hôte. | false |
dnsPolicy |
string | Politique DNS du pod de la passerelle. Pour plus d'informations, consultez la documentation DNS pour les services et les pods. | ClusterFirst |
runAsRoot |
bool | Indique si le conteneur de la passerelle s'exécute en tant que root. | false |
readinessProbe |
ReadinessProbeConfiguration | Paramètres de la sonde de readiness pour le pod de la passerelle. | Aucune |
Configuration du déploiement
| Champ | Type | Description | Valeur par défaut |
|---|---|---|---|
rollingMaxSurge |
string | Nombre maximal de pods pouvant dépasser le nombre souhaité de réplicas lors d'une mise à jour progressive. Accepte une valeur absolue ou un pourcentage. | "100%" |
rollingMaxUnavailable |
string | Nombre maximal de pods pouvant être indisponibles lors d'une mise à jour progressive. Accepte une valeur absolue ou un pourcentage. | "25%" |
Montages de volumes
| Champ | Type | Description | Valeur par défaut |
|---|---|---|---|
configVolumes |
ConfigVolume[] | Volumes ConfigMap montés sur le pod de la passerelle. Chaque entrée comprend les champs name, configMapName et mountPath. |
Aucune |
secretVolumes |
SecretVolume[] | Volumes Secret montés sur le pod de la passerelle. Chaque entrée comprend les champs name, secretName et mountPath. |
Aucune |
Exemple de volume ConfigMap :
configVolumes:
- name: config-volume-lua
configMapName: lua-libs
mountPath: /var/lib/lua
Exemple de volume Secret :
secretVolumes:
- name: myexample-customingressgateway-certs
secretName: istio-myexample-customingressgateway-certs
mountPath: /etc/istio/myexample-customingressgateway-certs
Horizontal Pod Autoscaling (HPA)
| Champ | Type | Description | Valeur par défaut |
|---|---|---|---|
cpu.targetAverageUtilization |
int32 | Utilisation cible du processeur (1–100). Lorsque l'utilisation dépasse ce seuil, le HPA effectue un scale-up. Lorsqu'elle descend en dessous, le HPA effectue un scale-down. | Aucune |
memory.targetAverageUtilization |
int32 | Utilisation cible de la mémoire (1–100). Suit le même comportement de mise à l'échelle que le processeur. | Aucune |
maxReplicas |
int32 | Nombre maximal de réplicas auxquels le HPA peut effectuer un scale-up. Doit être un entier positif. | Aucune |
minReplicas |
int32 | Nombre minimal de réplicas auxquels le HPA peut effectuer un scale-down. Doit être un entier positif (valeur minimale : 1). | Aucune |
Substitutions par cluster
Utilisez le champ overrides pour appliquer des paramètres différents par cluster lorsque le champ clusterIds inclut deux clusters ou plus.
| Champ | Type | Description | Valeur par défaut |
|---|---|---|---|
overrides |
map[string]Configuration | Une carte où chaque clé est un identifiant de cluster issu du champ clusterIds et la valeur contient les paramètres spécifiques au cluster. |
Aucune |
Les champs suivants peuvent être substitués par cluster :
serviceAnnotationspodAnnotationsresourcesreplicaCountChamps liés au HPA (ASM v1.16 ou version ultérieure)
serviceType(ASM v1.16 ou version ultérieure)
Exemple :
overrides:
cluster1Id:
replicaCount: 1
resources:
limits:
cpu: '2'
memory: 2G
serviceAnnotations:
service.beta.kubernetes.io/alicloud-loadbalancer-address-type: internet
cluster2Id:
replicaCount: 2
resources:
limits:
cpu: '4'
memory: 4G
Réglage du noyau
| Champ | Type | Description | Valeur par défaut |
|---|---|---|---|
kernel.enabled |
bool | Indique s'il faut appliquer des paramètres de noyau personnalisés au pod de la passerelle. | false |
kernel.parameters |
KernelParameters | Paramètres sysctl à régler. Toutes les valeurs doivent être des chaînes de caractères : mettez les nombres entre guillemets doubles (par exemple, net.core.somaxconn: "65535"). |
Aucune |
Paramètres du noyau pris en charge :
net.core.somaxconn, net.core.netdev_max_backlog, net.ipv4.tcp_rmem, net.ipv4.tcp_wmem, net.ipv4.ip_local_port_range, net.ipv4.tcp_fin_timeout, net.ipv4.tcp_tw_timeout, net.ipv4.tcp_tw_reuse, net.ipv4.tcp_tw_recycle, net.ipv4.tcp_timestamps, net.ipv4.tcp_retries2, net.ipv4.tcp_slow_start_after_idle, net.ipv4.tcp_max_orphans, net.ipv4.tcp_max_syn_backlog, net.ipv4.tcp_no_metrics_save, net.ipv4.tcp_autocorking, kernel.printk, vm.swappiness
Certains paramètres du noyau peuvent être invalides selon la version du noyau de l'hôte. Si le pod de la passerelle signale des erreurs, exécutez la commande kubectl describe pod pour identifier les paramètres invalides, puis supprimez-les.
Compression (passerelles d'entrée uniquement)
| Champ | Type | Description | Valeur par défaut |
|---|---|---|---|
compression.enabled |
bool | Indique s'il faut activer la compression des réponses. | false |
compression.gzip |
GzipConfiguration | Paramètres de compression Gzip. Requis pour activer la compression. Définissez sur gzip: {} pour utiliser toutes les valeurs par défaut. |
Aucune |
compression.content_type |
string[] | Types de contenu à compresser, identifiés par l'en-tête Content-Type (par exemple, text/html, application/json). |
Aucune |
compression.min_content_length |
uint32 | Taille minimale du corps de la réponse (en octets) qui déclenche la compression, basée sur l'en-tête Content-Length. |
30 |
compression.disable_on_etag_header |
bool | Lorsque la valeur est true, désactive la compression pour les réponses incluant un en-tête ETag. |
false |
compression.remove_accept_encoding_header |
bool | Lorsque la valeur est true, supprime l'en-tête Accept-Encoding des requêtes avant de les transférer aux serveurs amont. |
false |
Paramètres Gzip
| Champ | Type | Description | Valeur par défaut |
|---|---|---|---|
compression.gzip.memory_level |
uint32 | Niveau d'utilisation de la mémoire pour la bibliothèque zlib (1–9). Des valeurs plus élevées consomment plus de mémoire mais améliorent la vitesse et la qualité de la compression. | 5 |
compression.gzip.compression_level |
string | Niveau de compression pour la bibliothèque zlib. Valeurs valides : de COMPRESSION_LEVEL_1 à COMPRESSION_LEVEL_9, DEFAULT_COMPRESSION, BEST_SPEED, BEST_COMPRESSION. Le niveau 1 équivaut à BEST_SPEED. Le niveau 9 équivaut à BEST_COMPRESSION. Le niveau 6 équivaut à DEFAULT_COMPRESSION. |
DEFAULT_COMPRESSION |
compression.gzip.compression_strategy |
string | Stratégie de compression pour la bibliothèque zlib. Valeurs valides : DEFAULT_STRATEGY, FILTERED, HUFFMAN_ONLY, RLE, FIXED. |
DEFAULT_STRATEGY |
compression.gzip.window_bits |
uint32 | Taille de la fenêtre pour la bibliothèque zlib (9–15). Des valeurs plus élevées améliorent le taux de compression mais augmentent l'utilisation de la mémoire. | 12 |
compression.gzip.chunk_size |
uint32 | Taille du tampon de sortie pour la bibliothèque zlib. | 4096 |
Détails des stratégies de compression :
| Stratégie | Cas d'utilisation |
|---|---|
DEFAULT_STRATEGY |
Compression polyvalente. Fonctionne bien pour la plupart des données. |
FILTERED |
Données comportant de nombreux motifs répétitifs, comme du texte ou des données générées. |
HUFFMAN_ONLY |
Données statiques où la rapidité de décompression est prioritaire. |
RLE |
Données contenant de longues séquences d'octets répétés, telles que des images bitmap. |
FIXED |
Utilise un arbre de codage Huffman prédéfini pour une compression et une décompression rapides, au détriment du taux de compression. |
Champs déclenchant un redémarrage progressif
La modification de l'un des champs suivants entraîne un redémarrage progressif des pods de la passerelle. Planifiez soigneusement les changements dans les environnements de production.
| Champ | Remarque |
|---|---|
env |
|
ports |
Dans ASM v1.16 ou version ultérieure, les modifications apportées au champ ports ne déclenchent plus de redémarrage. |
configVolumes |
|
resources |
|
secretVolumes |
|
podLabels |
|
podAnnotations |
|
kernel.enabled |
|
kernel.parameters |
|
hostNetwork |
|
dnsPolicy |
|
nodeSelector |
Le redémarrage dépend de la planification des pods. |
affinity |
Le redémarrage dépend de la planification des pods. |
tolerations |
Le redémarrage dépend de la planification des pods. |