Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

Caso de uso de la Directiva de red Contrail Kubernetes

 

En esta sección, vamos’a crear un caso de uso para comprobar cómo funciona Kubernetes Directiva de red en los entornos contrail. ’Empezamos creando unos cuantos espacios de nombres y pods Kubernetes necesarios en la prueba. ’Confirmamos que cada conjunto Pod puede comunicarse con el dut (dispositivo sometido a prueba) gracias al modelo predeterminado de redes allow-any-any, y luego crear las políticas de red y observar cualquier cambio con el mismo patrón de tráfico.

Diseño de red

El diseño del caso de uso se muestra en la Figure 1.

Figure 1: Diseño de caso de prueba de directiva de red
Diseño de caso de prueba de directiva de red

En la Figure 1 , seis nodos se distribuyen en tres departamentos: dev, QA y jtac. El Departamento de desarrollo está ejecutando un servidor de base de datos (dbserver-dev), donde se almacena toda la información valiosa recopilada por el cliente. En su lugar, el diseño requiere que nadie tenga acceso directo a este servidor de base de servidores, sino que solo se permite el acceso a él a través de otro servidor Apache front-end en el Departamento de desarrollo, que se denomina WebServer-dev. Además, por razones de seguridad, el acceso a la información del cliente sólo debe concederse a clientes autorizados. Por ejemplo, solo los nodos del Departamento jtac, un nodo en el Departamento de desarrollo llamado cliente1-dev, y el 10.169.25.20 IP de origen pueden acceder a la BD a través de webserver. Y, por último, el servidor de base de datos dbserver-dev no debe iniciar ninguna conexión con otros nodos.

Preparación de la práctica

Este es un diseño de red muy común y simplificado que puede ver en cualquier lugar. Si modelamos todos estos elementos de red en el mundo de la Kubernetes, se parece a la Figure 2.

Figure 2: Directiva de red: NS y pods
Directiva de red: NS y pods

Pods necesitamos crear los siguientes recursos:

  • Tres espacios de nombres: dev, QA, jtac

  • Seis pods:

    • Dos pods de servidor: WebServer-dev, dbserver-dev

    • Dos pods de cliente en el mismo espacio de nombres que los pods de servidor: client1-dev, client2-dev

    • Dos pods de cliente de dos espacios de nombres diferentes: cliente-QA, cliente-jtac

  • Dos CIDR:

    • Especificación 10.169.25.20/32, se trata de la estructura IP del nodo cent222

    • Especificación 10.169.25.21/32, se trata de la estructura IP del nodo cent333

Table 1: Entorno de prueba de la Directiva de red Kubernetes

NS

caja

FUNC

partido

client1-dev

cliente web

partido

client2-dev

cliente web

asegura

cliente-QA

cliente web

jtac

cliente: jtac

cliente web

partido

servidor WebServer-dev

servidor WebServer que atiende a clientes

partido

dbserver-dev

dbserver Serving Server

Bien, deje’que prepare los recursos de namespace y K8S necesarios con un archivo todo en uno YAML que defina los espacios de nombres de dev, QA y jtac:

Tip

Idealmente, cada conjunto Pod debe ejecutarse con distintas imágenes. Por lo general, los puertos TCP son diferentes en un servidor WebServer y en un servidor de base de datos. En nuestro caso, para simplificar la prueba, usamos la misma imagen contrail-WebServer que’utilizamos a lo largo de todo el libro para todos los pods, de modo que la comunicación entre los clientes y el servidor WebServer y el servidor de base de datos utilice el mismo número de puerto 80 que atiende el mismo servidor http. Además, agregamos una etiqueta: política en todos los pods, de manera que la visualización de todos los pods utilizados en esta prueba también es más fácil.

Bien y ahora cree todos los recursos:

Modo de tráfico antes de crear la Directiva de red Kubernetes

Dado que tenemos todos los espacios de nombres y Juniper, antes de definir cualquier directiva de red’, voy a seguir adelante y enviar tráfico entre clientes y servidores.

Por supuesto, Kubernetes de redes, de forma predeterminada, sigue el modelo allow-any-any, por lo que deberíamos esperar que Access funcione entre cualquier conjunto Pod, que va a ser una relación de acceso completamente entrelazada. Sin embargo, tenga en cuenta que la DUT de esta prueba es WebServer-dev y dbserver-dev es aquél que más nos interesa observar. Para simplificar la verificación, según nuestro diagrama, nos’centramos en acceder a los pods de servidor de los pods de cliente, tal como se muestra en la figura 8,4.

Los puntos destacados de la figura 8,4 son que todos los clientes pueden tener acceso a los servidores, siguiendo el modelo permit-any-any:

  • no hay ninguna restricción entre los clientes ni WebServer-dev Pod

  • no hay ninguna restricción entre los clientes y dbserver, Pod de desarrollador

Y la comunicación entre el cliente y los servidores es bidireccional y simétrica – cada extremo puede iniciar una sesión o aceptar una sesión. Estas se asignan a la Directiva de salida y la Directiva de entrada, respectivamente, en Kubernetes.

Figure 3: Directiva de red: Comunicación Juniper antes de la creación de políticas de red
Directiva de red: Comunicación Juniper antes de la creación de políticas de red

Obviamente, esto no cumple nuestro objetivo de diseño, que es exactamente por qué necesitamos la Directiva de red Kubernetes, y’pronto nos encontraremos esa parte. Por ahora, veamos’rápidamente cómo comprobar el modelo allow-any-any networking.

Primero deje’que compruebe el servidor HTTP que se ejecuta en el puerto 80 de WebServer-dev y dbserver-pod de dev:

Note

Como se mencionó anteriormente, en esta prueba todos los pods tienen la misma imagen de contenedor, de manera que todos los pods ejecutan la misma aplicación WebServer en sus contenedores. Simplemente asignaremos a cada conjunto POD para que refleje sus diferentes funciones en el diagrama.

Ahora podemos comprobar el acceso a este servidor HTTP desde otros pods con los siguientes comandos. Para probar el tráfico de entrada:

Estos comandos desencadenan las solicitudes HTTP en el servidor WebServer-dev Pod desde todos los clientes y hosts de los dos nodos. La opción-M5 rizo hace que rizo espere un máximo de cinco segundos como respuesta antes de notificar el tiempo de espera. Como era de esperar, todos los accesos pasan y devuelven el mismo resultado mostrado a continuación.

Desde cliente1-dev:

Aquí, w3m obtiene el resultado de rizo, que devuelve un código HTML de la página web y lo procesa en texto legible y, a continuación, lo envía a grep para eliminar las líneas vacías. Para hacer que el comando sea más corto, puede definir un alias:

Ahora el comando es más corto:

De manera similar’, ll obtiene los mismos resultados de pruebas para obtener acceso a dbserver-dev desde cualquiera de los otros pods.