Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 

Espacios de nombres y aislamiento de Contrail

 

En el capítulo 3, se lee namespace o NS en Kubernetes y, al principio de este capítulo, hemos mencionado las asignaciones de objetos entre Kubernetes y Contrail. En esta sección’verá cómo funciona namespace en entornos de contrail y cómo contrail amplía aún más el conjunto de características.

Una analogía que se obtiene al introducir el namespace el concepto es OpenStack project, o bien tenant. Y eso es exactamente de lo Contrail lo mira. Siempre que una nueva namespace objeto se crea, contrail-kube-manager (KM) recibirá un aviso sobre el evento de creación de objetos y creará el proyecto correspondiente en Contrail.

Para diferenciar varios clústeres de Kubernetes en Contrail, se agregará un nombre de clúster Kubernetes al espacio de nombres Kubernetes o al nombre del proyecto. El nombre de clúster predeterminado Kubernetes es k8s. Por lo tanto, si crea un espacio de nombres Kubernetes ns-user-1, en una k8s-ns-user-1 el proyecto se creará en Contrail tal y como puede ver en la Figure 1, donde se muestra el contrail interfaz gráfica de usuario (GUI).

Figure 1: Comando de Contrail: Alza
Comando de Contrail: Alza

El Kubernetes cluster name se puede configurar, pero solo durante el proceso de implementación. Si no’lo configura k8s será el valor predeterminado. Una vez creado el clúster, no se puede cambiar el nombre. Para ver el cluster name, debe ir a la contrail-kube-manager (KM) y compruebe su archivo de configuración.

Para ubicar el contenedor del Docker de KM:

Para iniciar una sesión en el contenedor de KM:

Para encontrar el cluster_name ,

Note

El resto de este libro se referirá a todos estos términos namespace, NS, tenant, y project cambia.

Espacios de nombres no aislados

Debe tener en cuenta que un requisito de red básica de Kubernetes es para una red – plana o sin TDR cualquier conjunto Pod puede comunicarse con cualquier conjunto Pod – en cualquier espacio de nombres y cualquier proveedor CNI debe asegurarse de que. Por lo tanto, en Kubernetes, de forma predeterminada, todos los espacios de nombres no se aíslan:

Note

El término aislado y no aislado se encuentra únicamente en el contexto de las redes (Contrail).

k8s-default-pod-network and k8s-default-service-network

Para proporcionar funciones de red a todos los espacios de nombres no aislados, debe haber una tabla de enrutamiento y reenvío virtual o una instancia de enrutamiento común. En el entorno Contrail Kubernetes, dos redes virtuales predeterminadas se preconfiguran’ en K8S espacio de nombres predeterminado para pod y para Service, respectivamente. Lo que corresponde, hay dos tablas VRF, cada una con el mismo nombre que su red virtual correspondiente.

El nombre de las dos tablas de redes virtuales/VRF tiene este formato:

<k8s-cluster-name>-<namespace name>-[pod|service]-network

Por lo tanto, para el espacio de nombres predeterminado con un nombre de clúster predeterminado, k8s, los dos nombres de las redes virtuales/VRF son:

  • k8s-default-pod-network: la red virtual Pod/tabla VRF, con la subred predeterminada 10.32.0.0/12

  • k8s-default-service-network: la tabla/VRF de red virtual de servicio, con una subred predeterminada 10.96.0.0/12

Note

La subred predeterminada para Pod o servicio es configurable.

Es importante saber que estas dos redes virtuales predeterminadas se comparten entre todos los espacios de nombres no aislados. Esto significa que estarán disponibles para cualquier nuevo espacio de nombres no aislado que cree, implícitamente. ’Por qué los pods de todos los espacios de nombres no aislados, incluidos los espacios de nombres predeterminados, se pueden comunicar entre sí.

Por otro lado, cualquier red virtual que cree se aislará con otras redes virtuales, independientemente del mismo espacio de nombres o de otros distintos. La comunicación entre Juniper en dos redes virtuales distintas requiere una política de red Contrail.

Note

Más adelante, cuando lea acerca del servicio Kubernetes, es posible que se pregunte por qué los paquetes destinados a la red virtual de servicio/la tabla VRF pueden llegar al pod de back-end en la red virtual Pod/la tabla VRF. Una vez más, la buena noticia es a causa de Contrail Directiva de red. De forma predeterminada, la Directiva de red Contrail está habilitada entre las redes de servicio y Pod, lo que permite que los paquetes que llegan a la red virtual de servicio o la tabla VRF alcancen la Pod, y viceversa.

Espacios de nombres aislados

Por el contrario, los espacios de nombres aislados tienen su propia red Pod-Network y de servicio predeterminada, y por lo tanto, se crean también dos nuevas tablas VRF para cada espacio de nombres aislado. Las mismas subredes fijas 10.32.0.0/12 y 10.96.0.0/12 son compartidas por las redes Pod y de servicio en los espacios de nombres aislados. Sin embargo, dado que las redes tienen una tabla VRF diferente, se aísla de forma predeterminada con otro espacio de nombres. Los pods que se inician en espacios de nombres aislados solo pueden comunicarse con el servicio y los pods en el mismo espacio de nombres. Las configuraciones adicionales, por ejemplo, la política, son necesarias para que la caja Pod pueda conectar con la red fuera del espacio de nombres actual.

Para ilustrar este concepto,’deje que un ejemplo lo utilice. Supongamos que tiene tres espacios de nombres: el default espacio de nombres y dos espacios de nombres de usuario: ns-non-isolated y ns-isolated. En cada espacio de nombres puede crear una red virtual de usuario: vn-left-1. Finalizará a las siguientes redes virtuales o VRF en Contrail:

  • default-domain:k8s-default:k8s-default-pod-network

  • default-domain:k8s-default:k8s-default-service-network

  • default-domain:k8s-default:k8s-vn-left-1-pod-network

  • default-domain:k8s-ns-non-isolated:k8s-vn-left-1-pod-network

  • default-domain:k8s-ns-isolated:k8s-ns-isolated-pod-network

  • default-domain:k8s-ns-isolated:k8s-ns-isolated-service-network

  • default-domain:k8s-ns-isolated:k8s-vn-left-1-pod-network

Note

Los nombres anteriores se enumeran en el formato FQDN. En Contrail, dominio es el objeto de nivel superior, seguido por proyecto/inquilino y, a continuación, por redes virtuales.

La Figure 2 , de expertos, lo ilustra todo esto.

Figure 2: NS y Virtual Network
NS y Virtual Network

A continuación se muestra el archivo YAML para crear un espacio de nombres aislado:

Y para crear el NS:

Las anotaciones en metadatos son una forma adicional de comparar un espacio de nombres K8S estándar (no aislado). El valor de True indica que se trata de un espacio de nombres aislado:

Puede ver que esta parte de la definición es Juniper’extensión. El servicio contrail-kube-manager (KM) Lee el espacio de nombres metadata desde Kube-apiserver, analiza la información definida en la annotations objeto y observa que el isolation Flag se establece en true. A continuación, crea el inquilino con la instancia de enrutamiento correspondiente (una para pod y una para el servicio) en lugar de usar las instancias de enrutamiento de espacio de nombres predeterminadas para el espacio de nombres aislado. Fundamentalmente, la forma de implementar el aislamiento.

En las siguientes secciones se comprobará que el aislamiento de enrutamiento funciona.

Comunicación con los pods a través de NS

Crear un espacio de nombres no aislado y un espacio de nombres aislado:

En ambos espacios de nombres y en el espacio de nombres predeterminado, cree una implementación para iniciar un conjunto de servidores WebServer:

Ping entre todos los pods en tres espacios de nombres:

El resultado de la prueba muestra que la comunicación es bidireccional entre dos espacios de nombres no aislados (espacio de nombres ns-non-isolated y default, en este caso) funciona, pero el tráfico procedente de un espacio de nombres no aislado (default NS) hacia un espacio de nombres aislado no pasa a través de él. ¿Qué sucede con el tráfico dentro del mismo espacio de nombres aislado?

Con la potencia de deployment puede comprobarlo rápidamente: en un espacio de nombres aislado ns-isolated, clonar uno más Pod mediante la ampliación de la implementación con replicas=2 y ping entre los dos pods:

El paquete de ping pasa ahora. Para resumir los resultados de las pruebas:

  • El tráfico no se aísla entre los espacios de nombres no aislados.

  • El tráfico se aísla entre un espacio de nombres aislado y todos los demás inquilinos del clúster.

  • El tráfico no se aísla en el mismo espacio de nombres.

Note

El aislamiento de nivel Pod puede lograrse a través de Kubernetes Directiva de red o de grupos de seguridad de Contrail, todo ello tratado más adelante en este capítulo.