Kubernetes v1.23 [stable]Votre cluster Kubernetes inclut le support du dual-stack, ce qui signifie que le réseau du cluster permet d’utiliser l’une ou l’autre famille d’adresses IP. Dans un cluster, le plan de contrôle peut attribuer à la fois une adresse IPv4 et une adresse IPv6 à un seul Pod ou à un Service.
Vous devez avoir installé l’outil kubeadm, en suivant les étapes de Installation de kubeadm.
Pour chaque serveur que vous souhaitez utiliser comme nœud, assurez-vous que le forwarding IPv6 est activé.
Pour vérifier si le forwarding IPv6 est activé :
sysctl net.ipv6.conf.all.forwarding
Si la sortie est net.ipv6.conf.all.forwarding = 1, le transfert de paquets IPv6 est déjà activé.
Sinon, il n'est pas encore activé.
Pour activer manuellement le transfert de paquets IPv6 :
# sysctl params required by setup, params persist across reboots
cat <<EOF | sudo tee -a /etc/sysctl.d/k8s.conf
net.ipv6.conf.all.forwarding = 1
EOF
# Apply sysctl params without reboot
sudo sysctl --system
Vous devez disposer d’une plage d’adresses IPv4 et IPv6 à utiliser. Les opérateurs de cluster utilisent généralement
des plages d’adresses privées pour IPv4. Pour IPv6, un opérateur de cluster choisit généralement un bloc d’adresses unicast global
dans 2000::/3, en utilisant une plage attribuée à l’opérateur.
Vous n’avez pas besoin de router les plages d’adresses IP du cluster vers Internet.
La taille des allocations d’adresses IP doit être adaptée au nombre de Pods et de Services que vous prévoyez d’exécuter.
kubeadm upgrade,
kubeadm ne prend pas en charge la modification de la plage d’adresses IP des Pods
(“cluster CIDR”) ni de la plage d’adresses des Services (“Service CIDR”) du cluster.Pour créer un cluster dual-stack avec kubeadm init, vous pouvez passer des arguments en ligne de commande
similaires à l’exemple suivant :
# These address ranges are examples
kubeadm init --pod-network-cidr=10.244.0.0/16,2001:db8:42:0::/56 --service-cidr=10.96.0.0/16,2001:db8:42:1::/112
Pour plus de clarté, voici un exemple de fichier de configuration kubeadm
configuration kubeadm
kubeadm-config.yaml pour le nœud principal du plan de contrôle en dual-stack.
---
apiVersion: kubeadm.k8s.io/v1beta4
kind: ClusterConfiguration
networking:
podSubnet: 10.244.0.0/16,2001:db8:42:0::/56
serviceSubnet: 10.96.0.0/16,2001:db8:42:1::/112
---
apiVersion: kubeadm.k8s.io/v1beta4
kind: InitConfiguration
localAPIEndpoint:
advertiseAddress: "10.100.0.1"
bindPort: 6443
nodeRegistration:
kubeletExtraArgs:
- name: "node-ip"
value: "10.100.0.2,fd00:1:2:3::2"
advertiseAddress dans InitConfiguration spécifie l’adresse IP sur laquelle le serveur API annonce qu’il écoute.
La valeur de advertiseAddress correspond au flag --apiserver-advertise-address de kubeadm init.
Exécutez kubeadm pour initialiser le nœud du plan de contrôle en dual-stack :
kubeadm init --config=kubeadm-config.yaml
Les flags du kube-controller-manager --node-cidr-mask-size-ipv4 et --node-cidr-mask-size-ipv6
sont définis avec des valeurs par défaut. Voir
configurer le dual-stack IPv4/IPv6.
--apiserver-advertise-address ne prend pas en charge le dual-stack.Avant de joindre un nœud, assurez-vous que celui-ci dispose d’une interface réseau IPv6 routable et que le forwarding IPv6 est activé.
Voici un exemple de fichier de configuration kubeadm
configuration kubeadm
kubeadm-config.yaml pour ajouter un nœud worker au cluster.
apiVersion: kubeadm.k8s.io/v1beta4
kind: JoinConfiguration
discovery:
bootstrapToken:
apiServerEndpoint: 10.100.0.1:6443
token: "clvldh.vjjwg16ucnhp94qr"
caCertHashes:
- "sha256:a4863cde706cfc580a439f842cc65d5ef112b7b2be31628513a9881cf0d9fe0e"
# change auth info above to match the actual token and CA certificate hash for your cluster
nodeRegistration:
kubeletExtraArgs:
- name: "node-ip"
value: "10.100.0.2,fd00:1:2:3::3"
Voici également un exemple de fichier de configuration kubeadm
configuration kubeadm
kubeadm-config.yaml pour ajouter un autre nœud de plan de contrôle au cluster.
apiVersion: kubeadm.k8s.io/v1beta4
kind: JoinConfiguration
controlPlane:
localAPIEndpoint:
advertiseAddress: "10.100.0.2"
bindPort: 6443
discovery:
bootstrapToken:
apiServerEndpoint: 10.100.0.1:6443
token: "clvldh.vjjwg16ucnhp94qr"
caCertHashes:
- "sha256:a4863cde706cfc580a439f842cc65d5ef112b7b2be31628513a9881cf0d9fe0e"
# change auth info above to match the actual token and CA certificate hash for your cluster
nodeRegistration:
kubeletExtraArgs:
- name: "node-ip"
value: "10.100.0.2,fd00:1:2:3::4"
advertiseAddress dans JoinConfiguration.controlPlane spécifie l'adresse IP sur laquelle
le serveur API annoncera son écoute. La valeur de advertiseAddress correspond à
l'option --apiserver-advertise-address de kubeadm join.
kubeadm join --config=kubeadm-config.yaml
Pour plus de clarté, voici un exemple de fichier de configuration kubeadm
configuration kubeadm
kubeadm-config.yaml pour un nœud de plan de contrôle en mono-stack.
apiVersion: kubeadm.k8s.io/v1beta4
kind: ClusterConfiguration
networking:
podSubnet: 10.244.0.0/16
serviceSubnet: 10.96.0.0/16