

 **Ayude a mejorar esta página** 

Para contribuir a esta guía del usuario, elija el enlace **Edit this page on GitHub** que se encuentra en el panel derecho de cada página.

# Configuración del BGP de Cilium para nodos híbridos
<a name="hybrid-nodes-cilium-bgp"></a>

En este tema se describe cómo configurar el protocolo de puerta de enlace fronteriza (BGP) de Cilium para los nodos híbridos de Amazon EKS. La funcionalidad del BGP de Cilium se denomina [Cilium BGP Control Plane](https://docs.cilium.io/en/stable/network/bgp-control-plane/bgp-control-plane/) y se puede utilizar para anunciar las direcciones de los pods y los servicios en la red en las instalaciones. Para ver métodos alternativos para hacer que los CIDR de los pods sean enrutables en la red en las instalaciones, consulte [CIDR de pod remoto enrutable](hybrid-nodes-concepts-kubernetes.md#hybrid-nodes-concepts-k8s-pod-cidrs).

## Configuración del BGP de Cilium
<a name="hybrid-nodes-cilium-bgp-configure"></a>

### Requisitos previos
<a name="_prerequisites"></a>
+ Se instaló Cilium según las instrucciones de [Configuración de una CNI para nodos híbridos](hybrid-nodes-cni.md).

### Procedimiento
<a name="_procedure"></a>

1. Para usar el BGP con Cilium a fin de anunciar las direcciones de los pods o los servicios en la red en las instalaciones, debe haber instalado Cilium con `bgpControlPlane.enabled: true`. Si activa BGP para una implementación de Cilium existente, debe reiniciar el operador de Cilium para aplicar la configuración de BGP si BGP no se activó anteriormente. Puede configurar `operator.rollOutPods` como `true` en sus valores de Helm para reiniciar el operador de Cilium como parte del proceso de instalación o actualización de Helm.

   ```
   helm upgrade cilium oci://public.ecr.aws/eks/cilium/cilium \
     --namespace kube-system \
     --reuse-values \
     --set operator.rollOutPods=true \
     --set bgpControlPlane.enabled=true
   ```

1. Confirme que el operador y los agentes de Cilium se hayan reiniciado y estén funcionando.

   ```
   kubectl -n kube-system get pods --selector=app.kubernetes.io/part-of=cilium
   ```

   ```
   NAME                               READY   STATUS    RESTARTS   AGE
   cilium-grwlc                       1/1     Running   0          4m12s
   cilium-operator-68f7766967-5nnbl   1/1     Running   0          4m20s
   cilium-operator-68f7766967-7spfz   1/1     Running   0          4m20s
   cilium-pnxcv                       1/1     Running   0          6m29s
   cilium-r7qkj                       1/1     Running   0          4m12s
   cilium-wxhfn                       1/1     Running   0          4m1s
   cilium-z7hlb                       1/1     Running   0          6m30s
   ```

1. Cree un archivo llamado `cilium-bgp-cluster.yaml` con una definición `CiliumBGPClusterConfig`. Es posible que deba obtener la siguiente información de su administrador de red.
   + Configure `localASN` con el ASN para los nodos que ejecutan Cilium.
   + Configure `peerASN` con el ASN de su enrutador en las instalaciones.
   + Configure `peerAddress` con la IP del enrutador en las instalaciones con la que se emparejará cada nodo que ejecute Cilium.

     ```
     apiVersion: cilium.io/v2alpha1
     kind: CiliumBGPClusterConfig
     metadata:
       name: cilium-bgp
     spec:
       nodeSelector:
         matchExpressions:
         - key: eks.amazonaws.com/compute-type
           operator: In
           values:
           - hybrid
       bgpInstances:
       - name: "rack0"
         localASN: NODES_ASN
         peers:
         - name: "onprem-router"
           peerASN: ONPREM_ROUTER_ASN
           peerAddress: ONPREM_ROUTER_IP
           peerConfigRef:
             name: "cilium-peer"
     ```

1. Aplique la configuración de clúster del BGP de Cilium al clúster.

   ```
   kubectl apply -f cilium-bgp-cluster.yaml
   ```

1. Cree un archivo denominado `cilium-bgp-peer.yaml` con el recurso `CiliumBGPPeerConfig` que define una configuración de emparejamiento del BGP. Varios pares pueden compartir la misma configuración y proporcionar una referencia al recurso `CiliumBGPPeerConfig` común. Consulte [BGP Peer configuration](https://docs.cilium.io/en/latest/network/bgp-control-plane/bgp-control-plane-v2/#bgp-peer-configuration) en la documentación de Cilium para obtener una lista completa de las opciones de configuración.

   Los valores de las siguientes configuraciones de emparejamiento de Cilium deben coincidir con los del router en las instalaciones con el que se empareja.
   + Configure `holdTimeSeconds` para determinar cuánto tiempo espera un emparejamiento del BGP a recibir un mensaje de mantenimiento o actualización antes de declarar la sesión inactiva. El valor predeterminado es de 90 segundos.
   + Configure `keepAliveTimeSeconds` para determinar si aún se puede acceder a un emparejamiento del BGP y si la sesión del BGP está activa. El valor predeterminado es de 30 segundos.
   + Configure `restartTimeSeconds` para determinar el momento en que se espera que el plano de control del BGP de Cilium restablezca la sesión del BGP tras un reinicio. El valor predeterminado es de 120 segundos.

     ```
     apiVersion: cilium.io/v2alpha1
     kind: CiliumBGPPeerConfig
     metadata:
       name: cilium-peer
     spec:
       timers:
         holdTimeSeconds: 90
         keepAliveTimeSeconds: 30
       gracefulRestart:
         enabled: true
         restartTimeSeconds: 120
       families:
         - afi: ipv4
           safi: unicast
           advertisements:
             matchLabels:
               advertise: "bgp"
     ```

1. Aplique la configuración de emparejamiento del BGP de Cilium al clúster.

   ```
   kubectl apply -f cilium-bgp-peer.yaml
   ```

1. Cree un archivo llamado `cilium-bgp-advertisement-pods.yaml` con un recurso `CiliumBGPAdvertisement` para anunciar los CIDR de pods en su red en las instalaciones.
   + El recurso `CiliumBGPAdvertisement` se utiliza para definir varios tipos de anuncios y los atributos asociados a estos. En el siguiente ejemplo, se configura Cilium para que anuncie únicamente los CIDR de pods. Consulte los ejemplos de [LoadBalancer del tipo de servicio](hybrid-nodes-ingress.md#hybrid-nodes-ingress-cilium-loadbalancer) y [Equilibrio de carga en el clúster de Cilium](hybrid-nodes-load-balancing.md#hybrid-nodes-service-lb-cilium) para obtener más información sobre la configuración de Cilium para anunciar las direcciones de los servicios.
   + Cada nodo híbrido que ejecuta el agente de Cilium se empareja con el router ascendente compatible con el BGP. Cada nodo anuncia el rango de CIDR del pod que posee cuando el `advertisementType` de Cilium está configurado en `PodCIDR` como en el ejemplo siguiente. Consulte [BGP Advertisements configuration](https://docs.cilium.io/en/stable/network/bgp-control-plane/bgp-control-plane-v2/#bgp-advertisements) en la documentación de Cilium para obtener más información.

     ```
     apiVersion: cilium.io/v2alpha1
     kind: CiliumBGPAdvertisement
     metadata:
       name: bgp-advertisement-pods
       labels:
         advertise: bgp
     spec:
       advertisements:
         - advertisementType: "PodCIDR"
     ```

1. Aplique la configuración de anuncio de BGP de Cilium al clúster.

   ```
   kubectl apply -f cilium-bgp-advertisement-pods.yaml
   ```

1. Puede confirmar que el emparejamiento de BGP funcionó con la [CLI de Cilium](https://docs.cilium.io/en/stable/gettingstarted/k8s-install-default/#install-the-cilium-cli) mediante el comando `cilium bgp peers`. Debería ver los valores correctos en la salida del entorno y el estado de la sesión como `established`. Consulte la [Guía de solución de problemas y operaciones](https://docs.cilium.io/en/latest/network/bgp-control-plane/bgp-control-plane/#troubleshooting-and-operation-guide) en la documentación de Cilium para obtener más información sobre la solución de problemas.

   En los ejemplos siguientes, hay cinco nodos híbridos que ejecutan el agente de Cilium y cada nodo anuncia el rango de CIDR de pods que posee.

   ```
   cilium bgp peers
   ```

   ```
   Node                   Local AS    Peer AS               Peer Address        Session State   Uptime     Family         Received   Advertised
   mi-026d6a261e355fba7   NODES_ASN
                     ONPREM_ROUTER_ASN
                     ONPREM_ROUTER_IP    established     1h18m58s   ipv4/unicast   1          2
   mi-082f73826a163626e   NODES_ASN
                     ONPREM_ROUTER_ASN
                     ONPREM_ROUTER_IP    established     1h19m12s   ipv4/unicast   1          2
   mi-09183e8a3d755abf6   NODES_ASN
                     ONPREM_ROUTER_ASN
                     ONPREM_ROUTER_IP    established     1h18m47s   ipv4/unicast   1          2
   mi-0d78d815980ed202d   NODES_ASN
                     ONPREM_ROUTER_ASN
                     ONPREM_ROUTER_IP    established     1h19m12s   ipv4/unicast   1          2
   mi-0daa253999fe92daa   NODES_ASN
                     ONPREM_ROUTER_ASN
                     ONPREM_ROUTER_IP    established     1h18m58s   ipv4/unicast   1          2
   ```

   ```
   cilium bgp routes
   ```

   ```
   Node                   VRouter       Prefix           NextHop   Age         Attrs
   mi-026d6a261e355fba7   NODES_ASN     10.86.2.0/26     0.0.0.0   1h16m46s   [{Origin: i} {Nexthop: 0.0.0.0}]
   mi-082f73826a163626e   NODES_ASN     10.86.2.192/26   0.0.0.0   1h16m46s   [{Origin: i} {Nexthop: 0.0.0.0}]
   mi-09183e8a3d755abf6   NODES_ASN     10.86.2.64/26    0.0.0.0   1h16m46s   [{Origin: i} {Nexthop: 0.0.0.0}]
   mi-0d78d815980ed202d   NODES_ASN     10.86.2.128/26   0.0.0.0   1h16m46s   [{Origin: i} {Nexthop: 0.0.0.0}]
   mi-0daa253999fe92daa   NODES_ASN     10.86.3.0/26     0.0.0.0   1h16m46s   [{Origin: i} {Nexthop: 0.0.0.0}]
   ```