Contrôleur d'entrée Citrix ADC

Configurer la communication pod to pod à l’aide de Calico

La configuration d’un réseau dans Kubernetes est un véritable défi. Cela nécessite que vous traitiez de nombreux nœuds et espaces dans un système de cluster. Vous devez résoudre quatre problèmes lors de la configuration du réseau :

  • Communication de conteneur à conteneur (qui fournit collectivement un service)
  • Communication pod-à-pod
  • Communication entre le pod et le service
  • Communication externe au service

Communication pod-à-pod

Par défaut, le menu fixe crée un pont virtuel appelé docker0 sur la machine hôte et lui attribue une plage réseau privée. Pour chaque conteneur créé, un périphérique Ethernet virtuel est connecté à ce pont. Le périphérique Ethernet virtuel est ensuite mappé à eth0 l’intérieur du conteneur, avec une adresse IP de la plage réseau. Ce processus se produit pour chaque hôte exécutant le menu fixe. Il n’y a aucune coordination entre ces hôtes, par conséquent les plages réseau peuvent entrer en collision.

De ce fait, les conteneurs ne peuvent communiquer qu’avec des conteneurs connectés au même pont virtuel. Pour communiquer avec d’autres conteneurs sur d’autres hôtes, ils doivent s’appuyer sur le mappage des ports. Cela signifie que vous devez attribuer un port sur la machine hôte à chaque conteneur, puis transférer tout le trafic sur ce port vers ce conteneur.

Étant donné que l’adresse IP locale de l’application est convertie en adresse IP et port de l’hôte sur la machine hôte, Kubernetes suppose que tous les nœuds peuvent communiquer entre eux sans NAT. Il suppose également que l’adresse IP qu’un conteneur voit pour lui-même est la même adresse IP que celle que les autres conteneurs voient pour le conteneur. Cette approche vous permet également de porter facilement des applications depuis des machines virtuelles vers des conteneurs.

Calico est l’une des nombreuses options réseau qui offrent ces fonctionnalités pour Kubernetes.

Calico

Calico est conçu pour simplifier, faire évoluer et sécuriser les réseaux cloud. Le cadre open source permet la mise en réseau Kubernetes et la politique réseau pour les clusters dans le cloud. Au sein de l’écosystème Kubernetes, Calico commence à émerger comme l’un des frameworks ou plug-ins réseau les plus utilisés, de nombreuses entreprises l’utilisant à grande échelle.

Calico utilise une structure réseau IP pure pour fournir un réseau Kubernetes hautes performances, et son moteur de stratégie met en œuvre l’intention des développeurs en matière de gestion des politiques réseau de haut niveau. Calico fournit des capacités réseau de couche 3 et associe un routeur virtuel à chaque nœud. Il permet la mise en réseau d’hôte à hôte et d’espace à espace. Calico permet d’établir des limites de zone via BGP ou d’encapsulation via des méthodes IP sur IP ou VXLAN.

Intégration entre Kubernetes et Calico

Calico s’intègre à Kubernetes via un plug-in CNI construit sur une architecture de couche 3 entièrement distribuée. Par conséquent, il passe facilement d’un ordinateur portable à une grande entreprise. Il repose sur une couche IP et il est relativement facile à déboguer avec les outils existants.

Configurez le réseau avec Calico

Commencez par créer un cluster Kubernetes avec Calico à l’aide des commandes suivantes :

> kubeadm init --pod-network-cidr=192.168.0.0/16
> export KUBECONFIG=/etc/kubernetes/admin.conf
> kubectl apply -f calico.yaml

Un nœud maître est créé avec Calico en tant que CNI. Une fois que le nœud maître est opérationnel, vous pouvez joindre les autres nœuds au nœud maître à l’aide de la commande join.

Les processus Calico qui font partie du nœud maître Kubernetes sont les suivants :

  • Calico, etc.

    kube-system calico-etcd-j4rwc 1/1 en cours d’exécution

  • Contrôleur Calico

    kube-system calico-kube-controllers-679568f47c-vz69g 1/1 en cours d’exécution

  • Nœuds Calico

    kube-system calico-node-ct6c9 2/2 en cours d’exécution

Remarque :

Lorsque vous joignez un nœud au cluster Kubernetes, un nouveau nœud Calico est initié sur le nœud Kubernetes.

Configurer l’homologue BGP avec Ingress Citrix ADC

Chaque fois que vous déployez une application après avoir établi le réseau Calico dans le cluster, Kubernetes attribue une adresse IP du pool d’adresses IP de Calico au service associé à l’application.

Border Gateway Protocol (BGP) utilise un [numéro de système autonome (numéro AS)](https://en.wikipedia.org/wiki/Autonomous_system_(Internet)pour identifier les nœuds distants. Le numéro AS est un numéro spécial attribué par l’IANA utilisé principalement avec BGP pour identifier un réseau sous une administration réseau unique qui utilise une stratégie de routage unique.

Configurez le BGP sur Kubernetes à l’aide d’Ingress Citrix ADC

À l’aide d’un fichier YAML, vous pouvez appliquer la configuration BGP d’un nœud distant à l’aide de la commande kubectl create. Dans le fichier YAML, vous devez ajouter l’adresse IP homologue et le numéro AS. L’adresse IP homologue est l’adresse IP Citrix ADC d’entrée et le numéro AS est le numéro AS utilisé dans le Citrix ADC d’entrée.

Obtenez le numéro AS du cluster

À l’aide de la commande calicoctl, vous pouvez obtenir le numéro de système autonome utilisé par Calico BGP dans le cluster Kubernetes, comme indiqué dans l’image suivante :

Obtenir le numéro AS

Configurer l’homologue BGP global

À l’aide de cet calicoctl utilitaire, vous pouvez apparier des nœuds Calico avec des haut-parleurs BGP globaux. Ce type de pairs est appelé pair global.

Créez un fichier de définition YAML appelé bgp.yml avec la définition suivante :


apiVersion: projectcalico.org/v3  # This is the version of Calico
kind: BGPPeer  # BGPPeer specifies that its Global peering.
metadata:
    name: bgppeer-global-3040  # The name of the configuration
spec:
    peerIP: 10.102.33.208  # IP address of the Ingress Citrix ADC
    asNumber: 500  # AS number configured on the Ingress Citrix ADC
<!--NeedCopy-->

Déployez le fichier de définition à l’aide de la commande suivante :

> kubectl create -f bgp.yml

Ajoutez les configurations BGP sur le Citrix ADC Ingress

Procédez comme suit :

  1. Ouvrez une session sur l’interface de ligne de commande Citrix ADC.

  2. Activez la fonctionnalité BGP à l’aide de la commande suivante :

    > en feature bgp
      Done
    
  3. Tapez vtysh et appuyez sur Entrée.

    > vtysh
    ns#
    
  4. Passez au terminal de configuration à l’aide de la commande conf t :

    ns#conf t
    Enter configuration commands, one per line. End with CNTL/Z.
    ns(config)#
    
  5. Ajoutez la route BGP avec le numéro AS 500 à des fins de démonstration. Vous pouvez utiliser n’importe quel numéro comme numéro AS.

    ns(config)# router bgp 500
    ns(config-router)#
    
  6. Ajoutez des voisins à l’aide de la commande suivante :

    ns(config-router)# Neighbor 10.102.33.198 remote-as 64512
    ns(config-router)# Neighbor 10.102.22.202 remote-as 64512
    
  7. Vérifiez la configuration en cours à l’aide de la commande suivante :

    ns(config-router)#show running-config
    !
    log syslog
    log record-priority
    !
    ns route-install bgp
    !
    interface lo0
     ip adress 127.0.0.1/8
     ipv6 address fe80: :1/64
     ipv6 address : :1/128
    !
    interface vlan0
     ip address 10.102.33.208/24
     ipv6 address fe80::2cf6:beff:fe94:9f63/64
    !
    router bgp 500
     max-paths ebgp 8
     max-paths ibgp 8
     neighbor 10.102.33.198 remote-as 64512
     neighbor 10.102.33.202 remote-as 64512
    !
    end
    ns(config-router)# Dans l'échantillon, le numéro AS de Calico est 64512, vous pouvez modifier ce nombre selon vos besoins.
    
  8. Installez la table de routage des routes BGP vers Citrix ADC à l’aide de la commande suivante :

    ns(config)# ns route-install bgp
    ns(config)# 
    exit
    ns#exit
     Done
    
  9. Vérifiez l’itinéraire et ajoutez-le à la table de routage à l’aide de la commande suivante :

    Route Sh

Une fois la route installée, Citrix ADC est en mesure de communiquer avec les services présents dans le cluster Kubernetes :

Synthèse

Résolution des problèmes

Vous pouvez vérifier les configurations BGP sur le nœud maître du cluster Kubernetes à l’aide du calicoctl script.

Afficher les configurations de l’adresse IP homologue et du numéro AS

Vous pouvez afficher les configurations d’adresse IP homologue et de numéro AS à l’aide de la commande suivante :

>./calicoctl.1 get bgpPeer
NAME                    PEERIP          NODE        ASN
bgppeer-global-3040  10.102.33.208    (global)      500

Afficher l’état du nœud BGP

Vous pouvez afficher l’état d’un nœud BGP à l’aide de la commande suivante :

>calicoctl node status
IPV4 BGP status
+---------------+-----------+-------+----------+-------------+
| PEER ADDRESS | PEER TYPE | STATE | SINCE | INFO |
+---------------+-----------+-------+----------+-------------+
| 10.102.33.208 | global | up | 16:38:14 | Established |
+---------------+-----------+-------+----------+-------------+
Configurer la communication pod to pod à l’aide de Calico