Rutas estáticas
RESUMEN La versión 23.1 de Contrail Networking (CN2) nativa de la nube de Juniper admite rutas estáticas para el clúster. En este artículo se proporciona información sobre cómo configurar rutas estáticas para el clúster de CN2.
Descripción de rutas estáticas
Puede usar rutas estáticas cuando una red no requiere la complejidad de un protocolo de enrutamiento dinámico. Las rutas que son elementos permanentes en las tablas de enrutamiento y reenvío a menudo se configuran como rutas estáticas. El tráfico interno de las redes de código auxiliar se beneficia de las rutas estáticas.
La ruta consta de un prefijo de destino y una dirección de reenvío del próximo salto. La ruta estática se activa en la tabla de enrutamiento y se inserta en la tabla de reenvío cuando se puede acceder a la dirección del salto siguiente. El tráfico que coincide con la ruta estática se reenvía a la dirección del próximo salto especificada.
Rutas estáticas en CN2
CN2 implementa rutas estáticas a través de los siguientes dos recursos personalizados (CR):RouteTable
: contiene un destino del próximo salto definido por el usuario (nextHop
), junto con un prefijo de destino para identificar el tráfico del próximo salto. LanextHop
dirección IP debe ser una dirección IP de otro objeto VMI. Un prefijo define la red de destino que actúa como el siguiente salto para hacer coincidir el tráfico. ARouteTable
permite definir una ruta estática. Puede asociar aRouteTable
con una red virtual (VN). El siguiente es un ejemplo de unRouteTable
CR:apiVersion: core.contrail.juniper.net/v3 kind: RouteTable metadata: name: static-rt namespace: static-route spec: routes: route: - nextHop: 10.20.30.2 nextHopType: ip-address prefix: 10.20.30.0/24 communityAttributes: communityAttribute: - accept-own - no-advertise
nextHopType
debe tener el valorip-address
. Cualquier otro valor produce un error de entrada del usuario. ElcommunityAttributes
campo le permite controlar el aprendizaje de rutas a través de BGP.InterfaceRouteTable
: configura elInterfaceRouteTable
enrutamiento estático para una interfaz de máquina virtual (VMI). AnInterfaceRouteTable
contiene el prefijo de destino sin necesidad de una entrada de salto siguiente. Al igual que con unRouteTable
, el prefijo define la red de destino o el próximo salto. A diferencia de , no es necesario definir unanextHop
dirección IP porque cuando se asocia un con unInterfaceRouteTable
VMI,RouteTable
el VMI asociado actúa como el siguiente salto para este prefijo.El siguiente es un ejemplo de un
InterfaceRouteTable
CR:apiVersion: core.contrail.juniper.net/v3 kind: InterfaceRouteTable metadata: name: static-rt namespace: static-route spec: interfaceRouteTableRoutes: route: - nextHopType: ip-address prefix: 10.20.30.0/24 communityAttributes: communityAttribute: - accept-own
nextHopType
debe tener el valorip-address
. Cualquier otro valor produce un error de entrada del usuario.
Configuración de rutas estáticas para una red virtual
Configure elRouteTable
CR para aplicar rutas estáticas a una VN. Un VN hace referencia a a
RouteTable
en su especificación. Como resultado, se asocia con ese VN y se
RouteTable
configura la ruta estática. El siguiente es un objeto VN con un :
RouteTable
apiVersion: core.contrail.juniper.net/v3 kind: VirtualNetwork metadata: namespace: static-route name: vn-route spec: v4SubnetReference: apiVersion: core.contrail.juniper.net/v1alpha1 kind: Subnet namespace: static-route name: vn-subnet routeTableReferences: - apiVersion: core.contrail.juniper.net/v3 kind: RouteTable namespace: static-route name: static-rt
Configuración de rutas estáticas para una VMI
Configure yInterfaceRouteTable
aplique rutas estáticas a un VMI. Un VMI hace referencia a una
InterfaceRouteTable
en su
InterfaceRouteTableReference
sección. El siguiente es un objeto VMI con una referencia a un
InterfaceRouteTable
:
apiVersion: v3 kind: VirtualMachineInterface metadata: name: static-route-pod namespace: static-route annotations: core.juniper.net/interface-route-table: '[{"name": "static-rt", "namespace": "static-route"}]' spec: <VMI_SPEC> status: interfaceRouteTableReferences: - apiVersion: core.contrail.juniper.net/v3 kind: InterfaceRouteTable namespace: static-route name: static-rt
Configurar rutas estáticas en interfaces de pod
Puede usar la sección de anotaciones del manifiesto de un pod para configurar rutas estáticas para la interfaz predeterminada o secundaria de un pod. El reconciliador de pods procesa la sección de anotación para crear un objeto VMI con unInterfaceRouteTable
archivo . El reconciliador busca la clave de cadena: "core.juniper.net/interface-route-table" en la sección de anotaciones. El VMI del pod usa esa cadena como una etiqueta de metadatos para asociarla con un
InterfaceRouteTable
archivo .
A continuación se muestra un ejemplo de un manifiesto de pod con una InterfaceRouteTable
interfaz definida para la predeterminada:
apiVersion: v1 kind: Pod metadata: name: static-route-pod namespace: static-route annotations: core.juniper.net/interface-route-table: '[{"name": "vmi-rt", "namespace": "static-route"}]' spec: containers: - name: praqma image: <image-repository>:<tag> imagePullPolicy: Always securityContext: capabilities: add: - NET_ADMIN privileged: true
InterfaceRouteTable
definido para la interfaz secundaria:
apiVersion: v1 kind: Pod metadata: name: static-route-pod namespace: static-route annotations: k8s.v1.cni.cncf.io/networks: | [ { "name": "vn-route", "namespace": "static-route", "cni-args": { "core.juniper.net/interface-route-table": "[{\"name\": \"vmi-rt\", \"namespace\": "static-route\"}]" } } ] spec: containers: - name: praqma image: <image-repository>:<tag> imagePullPolicy: Always securityContext: capabilities: add: - NET_ADMIN privileged: true
name
name
para la interfaz
InterfaceRouteTable
secundaria es
vmi-rt
vn-route
. Al definir dos
InterfaceRouteTables
con diferente
names
en el mismo se
namespace
crea automáticamente un
InterfaceRouteTable
para la interfaz principal y secundaria de ese pod.
Configuración de rutas estáticas para una red virtual con un NAD
También puede especificar propiedades de ruta estática en un objeto de definición de datos adjuntos de red (NAD). Después de conciliar o aplicar el NAD, se crea a y el objeto VN resultante hace referencia aRouteTable
que
RouteTable
. El siguiente es un ejemplo de un NAD con información de ruta estática definida:
apiVersion: "k8s.cni.cncf.io/v1" kind: NetworkAttachmentDefinition metadata: name: vn-route namespace: static-route labels: vn: vn-route annotations: juniper.net/networks: '{ "ipamV4Subnet": "108.108.2.0/24" "routeTableReferences": '[{"name": "vn-rt", "namespace": "static-route"}]' }' spec: config: '{ "cniVersion": "0.3.1", "name": "vn-route", "type": "contrail-k8s-cni" }'
Múltiples rutas estáticas en interfaces de pod
Utilizando InterfaceRouteTable,
puede asociar varias rutas estáticas a una interfaz de un solo pod (VMI). Esto significa que ese objeto VMI tiene varios destinos predeterminados del próximo salto, según el prefijo IP. Puede especificar varias InterfaceRouteTable
referencias mediante la sintaxis de la versión del servicio de Cluster Server (CSV) o la sintaxis annotations
JSON.
Debe hacer referencia a un en un InterfaceRouteTable
formato de "espacio de nombres/nombre". En el ejemplo siguiente, es el espacio de nombres y y to-zone-1
to-right
son los InterfaceRouteTable
objetos, static-route
o destino del próximo salto para el left-vn
VMI.
El ejemplo siguiente es un Deployment
con varias InterfaceRouteTable
referencias:
apiVersion: apps/v1 kind: Deployment metadata: name: forwarder namespace: static-route labels: app: forwarder spec: replicas: 3 selector: matchLabels: app: forwarder template: metadata: labels: app: forwarder annotations: k8s.v1.cni.cncf.io/networks: | [ { "name": "left-vn", "namespace": "static-route", "cni-args": { "core.juniper.net/interface-route-table": "static-route/to-right,static-route/to-zone-1" } }, { "name": "right-vn", "namespace": "static-route", "cni-args": { "core.juniper.net/interface-route-table": "static-route/to-left" } }, { "name": "zone-1", "namespace": "static-route", "cni-args": { "core.juniper.net/interface-route-table": "static-route/to-left" } }, { "name": "zone-2", "namespace": "static-route", "cni-args": { "core.juniper.net/interface-route-table": "static-route/to-left" } } ] spec: containers: - name: praqma image: <repository>:<tag> securityContext: capabilities: add: - NET_ADMIN privileged: true
El siguiente ejemplo es un manifiesto de pod con varias InterfaceRouteTable
referencias mediante la sintaxis JSON:
apiVersion: v1 kind: Pod metadata: name: irt-right namespace: static-route annotations: k8s.v1.cni.cncf.io/networks: | [{ "name": "right-vn", "namespace": "static-route", "cni-args": { "core.juniper.net/interface-route-table": "[{\"namespace\": \"static-route\", "\name\": \"to-left\"}, {\"namespace\": \"static-route\", \"name\": \"to-zone-1\"}]" } }] spec: containers: - name: praqma image: <image-repository>:<tag> securityContext: capabilities: add: - NET_ADMIN privileged: true
Debe usar barras diagonales inversas en la sintaxis JSON. Se requieren barras diagonales inversas para codificar una cadena JSON dentro de otra cadena JSON.
Solución de problemas de RouteTable e InterfaceRouteTable
Las siguientes secciones contienen comandos útiles para solucionar varios RouteTable
InterfaceRouteTable
problemas.
Verificación del plano de configuración
-
Compruebe el estado de los
RouteTable
objetos yInterfaceRouteTable
.-
Compruebe el estado del reconciliador del
InterfaceRouteTable
objeto.kubectl get interfaceroutetable -n
-
Compruebe el estado del reconciliador del
RouteTable
objeto.kubectl get routetable -n
-
-
Compruebe la
RouteTable
referencia en el VN asociado. Compruebe laInterfaceRouteTable
referencia en el VMI asociado.-
Compruebe el estado del reconciliador para el VMI. Debería ver en
InterfaceRouteTable
la VMI con un identificador único universal (UUID) asociado el nombre de Contrail FQ (meta información comoapiversion
, ,namespace
name
,kind
).kubectl get vmi -n -oyaml | grep -i interfaceRouteTable
kubectl get vn -n -oyaml | grep -i routeTable
-
Verificación del plano de datos
-
En la introspección, compruebe que el VRF del VN muestra una fila con un prefijo de ruta estática coincidente especificado en el RT mediante los pasos siguientes:
-
Compruebe que el VRF esté asociado con el VN.
-
Desplácese hasta la columna ucindex en la unidifusión
RouteTable
VRF. -
Compruebe que la tabla contiene una fila con el prefijo de ruta estática correcto.
-
- En la introspección, compruebe que las propiedades del siguiente salto del VN sean válidas. En la introspección, la siguiente columna de salto para el prefijo debe contener lo siguiente:
-
El nombre de la interfaz del siguiente salto debe ser una interfaz de toque válida.
-
El
label
debe ser un entero positivo. -
El
resolved
valor debe sertrue
. -
El
route-type:
valor debe serInterfaceStaticRoute
.
-