# Support dual-stack avec kubeadm

LLMS index: [llms.txt](/llms.txt)

---

<!-- aperçu -->








  <div class="feature-state-notice feature-stable">
      <span class="feature-state-name">FEATURE STATE:</span>
      <code>Kubernetes v1.23 [stable]</code>
    </div>
  



Votre cluster Kubernetes inclut le support du [dual-stack](/docs/concepts/services-networking/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
<a class='glossary-tooltip' title='Le plus petit et le plus simple des objets Kubernetes. Un Pod est un ensemble de conteneurs fonctionnant sur votre cluster.' data-bs-toggle='tooltip' data-bs-placement='top' href='/fr/docs/concepts/workloads/pods/pod-overview/' target='_blank' aria-label='Pod'>Pod</a> ou à un <a class='glossary-tooltip' title='Un moyen d&#39;exposer une application s&#39;exécutant sur un ensemble de pods en tant que service réseau.' data-bs-toggle='tooltip' data-bs-placement='top' href='/fr/docs/concepts/services-networking/service/' target='_blank' aria-label='Service'>Service</a>.

<!-- corps -->

## Pré-requis

Vous devez avoir installé l’outil <a class='glossary-tooltip' title='Un outil pour installer rapidement Kubernetes et configurer un cluster sécurisé.' data-bs-toggle='tooltip' data-bs-placement='top' href='/fr/docs/reference/setup-tools/kubeadm/' target='_blank' aria-label='kubeadm'>kubeadm</a>,
en suivant les étapes de [Installation de kubeadm](/docs/setup/production-environment/tools/kubeadm/install-kubeadm/).

Pour chaque serveur que vous souhaitez utiliser comme <a class='glossary-tooltip' title='Un nœud est une machine de travail dans Kubernetes.' data-bs-toggle='tooltip' data-bs-placement='top' href='/fr/docs/concepts/architecture/nodes/' target='_blank' aria-label='nœud'>nœud</a>,
assurez-vous que le forwarding IPv6 est activé.

### Activer le forwarding des paquets IPv6 {#prerequisite-ipv6-forwarding}

Pour vérifier si le forwarding IPv6 est activé :

```bash
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 :

```bash
# 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.


<div class="alert alert-info" role="note"><h4 class="alert-heading">Note</h4>Si vous mettez à niveau un cluster existant avec la commande <code>kubeadm upgrade</code>,
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.</div>


### Créer un cluster dual-stack

Pour créer un cluster dual-stack avec `kubeadm init`, vous pouvez passer des arguments en ligne de commande
similaires à l’exemple suivant :

```shell
# 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](/docs/reference/config-api/kubeadm-config.v1beta4/)
`kubeadm-config.yaml` pour le nœud principal du plan de contrôle en dual-stack.

```yaml
---
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 :

```shell
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](/docs/concepts/services-networking/dual-stack#configure-ipv4-ipv6-dual-stack).


<div class="alert alert-info" role="note"><h4 class="alert-heading">Note</h4>Le flag <code>--apiserver-advertise-address</code> ne prend pas en charge le dual-stack.</div>


### Joindre un nœud à un cluster 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](/docs/reference/config-api/kubeadm-config.v1beta4/)
`kubeadm-config.yaml` pour ajouter un nœud worker au cluster.

```yaml
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](/docs/reference/config-api/kubeadm-config.v1beta4/)
`kubeadm-config.yaml` pour ajouter un autre nœud de plan de contrôle au cluster.

```yaml
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`.

```shell
kubeadm join --config=kubeadm-config.yaml
```

### Créer un cluster mono-stack


<div class="alert alert-info" role="note"><h4 class="alert-heading">Note</h4>Le support du dual-stack ne signifie pas que vous devez obligatoirement utiliser un adressage dual-stack.
Vous pouvez déployer un cluster mono-stack avec la fonctionnalité de dual-stack réseau activée.</div>


Pour plus de clarté, voici un exemple de fichier de configuration kubeadm
[configuration kubeadm](/docs/reference/config-api/kubeadm-config.v1beta4/)
`kubeadm-config.yaml` pour un nœud de plan de contrôle en mono-stack.

```yaml
apiVersion: kubeadm.k8s.io/v1beta4
kind: ClusterConfiguration
networking:
  podSubnet: 10.244.0.0/16
  serviceSubnet: 10.96.0.0/16
```

## A suivre

* [Valider le dual-stack IPv4/IPv6](/docs/tasks/network/validate-dual-stack)
* En savoir plus sur le réseau de cluster [Dual-stack](/docs/concepts/services-networking/dual-stack/)
* Découvrir le format de configuration kubeadm [configuration kubeadm](/docs/reference/config-api/kubeadm-config.v1beta4/)
