CNI (Container Network Interface) est la norme des plug-ins réseau Kubernetes. Une chaîne CNI relie plusieurs plug-ins CNI de manière séquentielle : chaque plug-in gère des tâches spécifiques telles que l'attribution d'adresse IP ou le routage, en transmettant les résultats au suivant jusqu'à ce que toutes les tâches soient terminées. Cette rubrique explique comment configurer une chaîne CNI personnalisée dans un cluster ACK Terway.
Prérequis
Un cluster managé ACK avec le plug-in réseau Terway est créé.
Terway v1.5.6 ou version ultérieure. Le cluster n'utilise pas le mode réseau ENI exclusif.
ACK ne garantit pas la compatibilité entre les plug-ins CNI. La configuration d'une chaîne CNI personnalisée constitue une opération à haut risque. Assurez-vous de bien comprendre le fonctionnement de chaque plug-in avant de poursuivre afin d'éviter toute interruption de service.
Configurer une chaîne CNI personnalisée
Ajoutez les plug-ins CNI au fichier de configuration de Terway.
-
Modifiez le ConfigMap
eni-config:kubectl edit cm -nkube-system eni-configParamètre
Description
10-terway.conf
La configuration CNI de Terway. Ne modifiez pas ce paramètre.
ImportantNe modifiez pas ce fichier.
10-terway.conflist
La configuration de la chaîne CNI personnalisée.
La première entrée dans
pluginsdoit correspondre à10-terway.conf.ImportantIl s'agit d'un exemple de configuration. Ne l'utilisez pas directement.
Le bloc de configuration doit être au format JSON.
Fichier de configuration
kind: ConfigMap apiVersion: v1 metadata: name: eni-config namespace: kube-system data: 10-terway.conflist: | { "plugins": [ { "cniVersion": "0.4.0", "name": "terway", "type": "terway", "capabilities": {"bandwidth": true} }, { "type": "portmap", "capabilities": {"portMappings": true}, "externalSetMarkChain":"KUBE-MARK-MASQ" } ] } 10-terway.conf: | { "cniVersion": "0.4.0", "name": "terway", "type": "terway", "capabilities": {"bandwidth": true} } -
Exécutez
kubectl rollout restart -n kube-system daemonset.apps/terway-eniippour reconstruire les pods Terway.Si la configuration est correcte, vérifiez la configuration du plug-in personnalisé dans
etc/cni/net.d/10-terway.conflistsur le nœud.
Cas d'utilisation
Configurer un portmap
Le plug-in portmap mappe les ports des pods aux ports de l'hôte pour permettre l'accès externe.
Pour l'accès au réseau public, configurez les règles entrantes du groupe de sécurité afin d'autoriser le trafic sur les ports requis.
Ces règles peuvent entrer en conflit avec les politiques réseau Kubernetes. Effectuez des tests approfondis avant le déploiement en production.
Exemple de configuration
-
Accès via l'adresse IP privée et le port d'un nœud :
kind: ConfigMap apiVersion: v1 metadata: name: eni-config namespace: kube-system data: 10-terway.conflist: | { "plugins": [ { "cniVersion": "0.4.0", "name": "terway", "type": "terway", "capabilities": {"bandwidth": true} }, { "type": "portmap", "capabilities": {"portMappings": true}, "externalSetMarkChain":"KUBE-MARK-MASQ" } ] } 10-terway.conf: | { "cniVersion": "0.4.0", "name": "terway", "type": "terway", "capabilities": {"bandwidth": true} } -
Accès via l'adresse IP publique et le port :
L'accès au réseau public nécessite la configuration suivante.
Paramètre
Non-Datapath V2
Datapath V2
masqAll
Non requis
Requis
symmetric_routing
Requis
Requis
masqAll : Paramètre du plug-in portmap. Nécessite la version 1.7.1 ou ultérieure de portmap.
symmetric_routing : Paramètre du plug-in Terway. Nécessite la version 1.15.0 ou ultérieure de Terway.
Les clusters Datapath V2 avec remplacement de kube-proxy ne nécessitent pas le plug-in portmap.
kind: ConfigMap apiVersion: v1 metadata: name: eni-config namespace: kube-system data: 10-terway.conflist: | { "name": "terway-chain", "plugins": [ { "cniVersion": "0.4.0", "name": "terway", "type": "terway", "symmetric_routing": true, "capabilities": {"bandwidth": true} }, { "type": "portmap", "capabilities": {"portMappings": true}, "masqAll": false } ] } 10-terway.conf: | { "cniVersion": "0.4.0", "name": "terway", "type": "terway", "capabilities": {"bandwidth": true} }
Désactiver les adresses link-local IPv6 pour les conteneurs
Même sans la fonctionnalité double pile IPv6, les conteneurs reçoivent automatiquement une adresse link-local IPv6 dans le sous-réseau fe80::/64 . Ce comportement par défaut du noyau est généralement inoffensif.
Si une application gère incorrectement les adresses réseau, elle peut utiliser les adresses link-local IPv6 pour la communication inter-réseaux. Les adresses link-local ne fonctionnent qu'au sein du même lien, ce qui entraîne des échecs. Signalez d'abord ces problèmes au fournisseur de l'application.
Pour désactiver les adresses link-local IPv6 dans les conteneurs, configurez le plug-in tuning .
Exemple de configuration
kind: ConfigMap
apiVersion: v1
metadata:
name: eni-config
namespace: kube-system
data:
10-terway.conflist: |
{
"plugins": [
{
"cniVersion": "0.4.0",
"name": "terway",
"type": "terway",
"capabilities": {"bandwidth": true}
},
{
"type": "tuning",
"sysctl": {
"net.ipv6.conf.all.disable_ipv6": "1",
"net.ipv6.conf.default.disable_ipv6": "1",
"net.ipv6.conf.lo.disable_ipv6": "1"
}
}
]
}
10-terway.conf: |
{
"cniVersion": "0.4.0",
"name": "terway",
"type": "terway",
"capabilities": {"bandwidth": true}
}