Ingress Controller de Citrix ADC

Configurar la comunicación de pod a pod con Calico

Configurar una red en Kubernetes es un desafío. Requiere que se ocupe de muchos nodos y pods en un sistema de clústeres. Hay cuatro problemas que debe abordar al configurar la red:

  • Comunicación de contenedor a contenedor (que en conjunto proporciona un servicio)
  • Comunicación de pod a pod
  • Comunicación de pod a servicio
  • Comunicación externa al servicio

Comunicación de pod a pod

De forma predeterminada, docker crea un puente virtual llamado docker0 en la máquina host y le asigna un intervalo de red privada. Para cada contenedor que se crea, se conecta un dispositivo Ethernet virtual a este puente. El dispositivo Ethernet virtual se asigna al eth0 interior del contenedor, con una IP del intervalo de redes. Este proceso ocurre para cada host que ejecuta docker. No hay coordinación entre estos hosts, por lo que los intervalos de red pueden colisionar.

Por este motivo, los contenedores solo pueden comunicarse con los contenedores que están conectados al mismo puente virtual. Para comunicarse con otros contenedores en otros hosts, deben confiar en la asignación de puertos. Esto significa que debe asignar un puerto en la máquina host a cada contenedor y luego reenviar todo el tráfico de ese puerto a ese contenedor.

Dado que la dirección IP local de la aplicación se traduce a la dirección IP del host y al puerto de la máquina host, Kubernetes asume que todos los nodos pueden comunicarse entre sí sin NAT. También se supone que la dirección IP que un contenedor ve por sí mismo es la misma dirección IP que ven los demás contenedores para el contenedor. Este enfoque también le permite portar aplicaciones fácilmente desde máquinas virtuales a contenedores.

Calico es una de las muchas opciones de red diferentes que ofrecen estas capacidades para Kubernetes.

Calico

Calico está diseñado para simplificar, escalar y proteger las redes en la nube. El marco de código abierto habilita la directiva de redes y redes de Kubernetes para clústeres en la nube. Dentro del ecosistema de Kubernetes, Calico está empezando a emerger como uno de los marcos de red o complementos más utilizados, y muchas empresas lo utilizan a escala.

Calico utiliza una estructura de redes IP pura para ofrecer redes de Kubernetes de alto rendimiento, y su motor de directivas refuerza la intención del desarrollador de una gestión de directivas de red de alto nivel. Calico proporciona capacidades de red de capa 3 y asocia un enrutador virtual con cada nodo. Permite la conexión en red de host a host y de pod a pod. Calico permite establecer límites de zona a través de BGP o encapsulación a través de métodos IP sobre IP o VXLAN.

Integración entre Kubernetes y Calico

Calico se integra con Kubernetes a través de un complemento CNI creado en una arquitectura de capa 3 completamente distribuida. Por lo tanto, se amplía sin problemas desde un único portátil hasta una gran empresa. Se basa en una capa IP y es relativamente fácil de depurar con las herramientas existentes.

Configura la red con Calico

Primero, abre un clúster de Kubernetes con Calico con los siguientes comandos:

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

Se crea un nodo maestro con Calico como CNI. Una vez que el nodo principal esté en funcionamiento, puede unir los demás nodos al maestro mediante el comando join.

Los procesos de Calico que forman parte del nodo maestro de Kubernetes son:

  • Calico etcd

    kube-system calico-etcd-j4rwc 1/1 Correr

  • Controlador Calico

    kube-system calico-kube-controladores-679568f47c-vz69g 1/1 Correr

  • Nodos calico

    kube-system calico-node-ct6c9 2/2 Correr

Nota:

Cuando unes un nodo al clúster de Kubernetes, se inicia un nuevo nodo de Calico en el nodo de Kubernetes.

Configurar el mismo nivel de BGP con Citrix ADC de entrada

Cada vez que implementa una aplicación después de establecer la red de Calico en el clúster, Kubernetes asigna una dirección IP del grupo de direcciones IP de Calico al servicio asociado a la aplicación.

Border Gateway Protocol (BGP) utiliza un [número de sistema autónomo (número AS)](https://en.wikipedia.org/wiki/Autonomous_system_(Internet)para identificar los nodos remotos. El número AS es un número especial asignado por la IANA y que se utiliza principalmente con BGP para identificar una red bajo una sola administración de red que utiliza una directiva de redirección única.

Configurar BGP en Kubernetes mediante Citrix ADC de entrada

Con un archivo YAML, puede aplicar la configuración BGP de un nodo remoto mediante el comando kubectl create. En el archivo YAML, debe agregar la dirección IP del mismo nivel y el número AS. La dirección IP del mismo nivel es la dirección IP de Citrix ADC de entrada y el número AS es el número AS que se utiliza en el Citrix ADC de entrada.

Obtenga el número AS del clúster

Con el comando calicoctl, puede obtener el número AS que usa Calico BGP en el clúster de Kubernetes, como se muestra en la siguiente imagen:

Obtener el número AS

Configurar par BGP global

Con la utilidad calicoctl, puede conectar nodos Calico con altavoces BGP globales. Este tipo de pares se llama pares globales.

Cree un archivo de definición YAML llamado bgp.yml con la siguiente definición:


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-->

Implemente el archivo de definición mediante el siguiente comando:

> kubectl create -f bgp.yml

Agregue las configuraciones de BGP en el Citrix ADC de entrada

Lleve a cabo lo siguiente:

  1. Inicie sesión en la interfaz de línea de comandos de Citrix ADC.

  2. Habilite la función BGP con el siguiente comando:

    > en feature bgp
      Done
    
  3. Escriba vtysh y pulse Intro.

    > vtysh
    ns#
    
  4. Cambie a la terminal de configuración con el comando conf t:

    ns#conf t
    Enter configuration commands, one per line. End with CNTL/Z.
    ns(config)#
    
  5. Agregue la ruta BGP con el número AS como 500 para fines de demostración. Puede usar cualquier número como número AS.

    ns(config)# router bgp 500
    ns(config-router)#
    
  6. Agregue vecinos mediante el siguiente comando:

    ns(config-router)# Neighbor 10.102.33.198 remote-as 64512
    ns(config-router)# Neighbor 10.102.22.202 remote-as 64512
    
  7. Revise la configuración en ejecución mediante el siguiente comando:

    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)# En la muestra, el número AS de Calico es 64512, puede cambiar este número según sus requisitos.
    
  8. Instale las rutas BGP en la tabla de redirección de Citrix ADC mediante el siguiente comando:

    ns(config)# ns route-install bgp
    ns(config)# 
    exit
    ns#exit
     Done
    
  9. Verifique la ruta y agréguela a la tabla de redirección con el siguiente comando:

    Ruta Sh

Una vez que se instala la ruta, Citrix ADC puede comunicarse con los servicios que están presentes en el clúster de Kubernetes:

Resumen

Solución de problemas

Puede verificar las configuraciones de BGP en el nodo principal del clúster de Kubernetes mediante el calicoctl script.

Ver las configuraciones de la dirección IP del mismo nivel y el número AS

Puede ver las configuraciones de la dirección IP del mismo nivel y el número AS mediante el siguiente comando:

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

Ver el estado del nodo BGP

Puede ver el estado de un nodo BGP con el siguiente comando:

>calicoctl node status
IPV4 BGP status
+---------------+-----------+-------+----------+-------------+
| PEER ADDRESS | PEER TYPE | STATE | SINCE | INFO |
+---------------+-----------+-------+----------+-------------+
| 10.102.33.208 | global | up | 16:38:14 | Established |
+---------------+-----------+-------+----------+-------------+
Configurar la comunicación de pod a pod con Calico