Alibaba Cloud Service Mesh (ASM) prend en charge les modes sidecar et sans sidecar pour le déploiement des proxys de maillage. En mode sidecar, un conteneur de proxy de maillage partage le pod et l'espace de noms réseau avec le conteneur d'application. Il intercepte de manière transparente le trafic entrant et sortant afin de fournir l'équilibrage de charge, la découverte de services, le contrôle du trafic, la sécurité et l'observabilité.
Le mode sidecar natif exploite la fonctionnalité de conteneur sidecar intégrée à Kubernetes (disponible depuis Kubernetes 1,29) pour lier le cycle de vie du proxy de maillage à celui du conteneur d'application. Cette approche élimine les problèmes de démarrage, d'arrêt et de fin de Job inhérents aux déploiements sidecar traditionnels.
Pourquoi utiliser le mode sidecar natif
Dans un déploiement sidecar traditionnel, Kubernetes traite le proxy de maillage et l'application comme des conteneurs indépendants dotés de cycles de vie distincts. Cette discordance entraîne plusieurs problèmes opérationnels :
Condition de concurrence au démarrage -- Si le conteneur d'application démarre avant que le sidecar
istio-proxyne soit prêt, l'application ne peut pas accéder au réseau. La section Démarrage progressif du sidecar atténue ce problème, mais celui-ci persiste lorsque le sidecar démarre lentement.Ordre d'arrêt -- Si le sidecar
istio-proxys'arrête avant le conteneur d'application, l'application perd l'accès au réseau. La section Arrêt progressif du sidecar atténue ce problème, mais peut prolonger le temps de terminaison du pod.Pods zombies issus des Jobs -- Lorsqu'un conteneur d'application dans un Job se termine après l'exécution de la tâche, le proxy sidecar continue de s'exécuter et empêche la terminaison du pod.
Absence de réseau pour les conteneurs d'initialisation -- Les conteneurs d'initialisation qui s'exécutent avant le démarrage du proxy sidecar ne peuvent pas accéder au réseau. Une solution de contournement consiste à exclure certains ports de la redirection du trafic sidecar.
Le mode sidecar natif résout ces quatre problèmes. Le proxy de maillage est défini comme un conteneur sidecar natif (un conteneur d'initialisation avec restartPolicy: Always). Kubernetes garantit ainsi les comportements suivants :
Il démarre avant les conteneurs standards et reste en cours d'exécution tout au long du cycle de vie du pod.
Il ne s'arrête qu'après la terminaison de tous les conteneurs standards.
Il se termine automatiquement lorsque le dernier conteneur standard se termine, évitant ainsi les pods zombies.
Il s'exécute avant les autres conteneurs d'initialisation, leur permettant d'accéder au réseau via le proxy de maillage.
Sidecar traditionnel contre sidecar natif
| Attribut | Sidecar traditionnel | Sidecar natif |
|---|---|---|
| Version de Kubernetes | Communauté : 1,4 à 1,28. Clusters ACK, ACK Serverless ou ACS : 1,30 et antérieures | Communauté : 1,29 et ultérieures. Clusters ACK, ACK Serverless ou ACS : 1,30 et ultérieures |
| Version d'ASM | ASM 1,22 et antérieures | Lorsque vous ajoutez des clusters ACK, ACK Serverless ou ACS de version 1,30 et antérieures à des instances ASM de version 1,22 et antérieures, les proxys de maillage sont déployés en mode sidecar natif par défaut |
| Emplacement dans la spécification du pod | istio-proxy apparaît dans le champ containers aux côtés du conteneur d'application |
istio-proxy apparaît dans le champ initContainers avec restartPolicy: Always |
| Gestion du cycle de vie | Indépendante du conteneur principal ; nécessite une configuration manuelle pour l'ordre de démarrage et d'arrêt | Synchronisée automatiquement avec le conteneur principal ; aucune configuration supplémentaire n'est nécessaire |
Vérifier le mode de déploiement
Pour déterminer le mode sidecar utilisé par un pod, inspectez sa spécification à la recherche de deux indicateurs : l'emplacement du conteneur istio-proxy et la présence de restartPolicy: Always.
kubectl get pod <pod-name> -o yaml
Remplacez <pod-name> par le nom réel du pod.
Mode sidecar natif -- La sortie inclut istio-proxy dans la section initContainers :
apiVersion: v1
kind: Pod
metadata:
name: sleep-xxxxxxxx-xxxxx
namespace: default
spec:
containers:
...
- image: 'registry.cn-hangzhou.aliyuncs.com/acs/curl:8.1.2'
imagePullPolicy: IfNotPresent
name: sleep
...
initContainers:
...
- image: registry-cn-hangzhou-vpc.ack.aliyuncs.com/acs/proxyv2:v1.22.2.35-ge64ec8af-aliyun
imagePullPolicy: IfNotPresent
name: istio-proxy
ports:
- containerPort: 15090
name: http-envoy-prom
protocol: TCP
restartPolicy: Always # Confirms native sidecar mode
...
Mode sidecar traditionnel -- Le conteneur istio-proxy apparaît dans le champ containers au lieu de initContainers, et aucun restartPolicy: Always n'est défini.
En mode sidecar natif, les configurations du proxy sidecar liées au cycle de vie (telles que le démarrage et l'arrêt progressifs) ne sont pas nécessaires et n'ont aucun effet. Pour la liste complète des paramètres du proxy sidecar, consultez la section Configurer les proxys sidecar .
Passer au mode sidecar traditionnel
Certains composants MutatingWebhook tiers configurés sur Kubernetes version 8 ou antérieure peuvent modifier la définition du pod d'une manière incompatible avec les conteneurs sidecar natifs. Par exemple, le composant logsidecar-injector de KubeSphere peut supprimer la définition du sidecar natif et provoquer des échecs de création de pod. Si vous rencontrez des problèmes similaires, passez au mode sidecar traditionnel.
Les webhooks mutants peuvent modifier les pods en fonction de diverses conditions. Avant de changer de mode, vérifiez si des webhooks d'admission dans votre cluster interfèrent avec les conteneurs sidecar natifs.
Prérequis
Avant de commencer, assurez-vous d'avoir :
Accès à l'instance ASM avec
kubectl. Pour plus de détails, consultez la section Utiliser kubectl sur le plan de contrôle pour accéder aux ressources Istio
Étapes
-
Désactivez le mode sidecar natif en appliquant un patch à la ressource
asmmeshconfig:kubectl patch asmmeshconfig default --type=merge --patch='{"spec":{"enableNativeSidecar":false}}'Sortie attendue :
asmmeshconfig.istio.alibabacloud.com/default patched Redémarrez les pods concernés pour appliquer la modification. Pour plus de détails, consultez la section Redéployer les charges de travail.
-
Vérifiez que le pod utilise désormais le mode sidecar traditionnel :
kubectl get pod <pod-name> -o yamlDans la sortie, confirmez que
istio-proxyapparaît dans le champcontainers(et non dansinitContainers) :apiVersion: v1 kind: Pod metadata: name: sleep-xxxxxxxx-xxxxx namespace: default spec: containers: ... - image: registry-cn-hangzhou-vpc.ack.aliyuncs.com/acs/proxyv2:v1.22.2.35-ge64ec8af-aliyun name: istio-proxy ports: - containerPort: 15090 name: http-envoy-prom protocol: TCP ... - image: 'registry.cn-hangzhou.aliyuncs.com/acs/curl:8.1.2' imagePullPolicy: IfNotPresent name: sleep ...Le conteneur
istio-proxyne figure plus dansinitContainerset ne possède pasrestartPolicy: Always, confirmant ainsi le passage au mode sidecar traditionnel.