Productos secos: el método de obtener la IP de origen del cliente en el contenedor en diferentes escenarios

Resumen: Puede haber muchas formas diferentes de servidores proxy entre el cliente y el servidor contenedor ¿Cómo obtener la IP de origen real del cliente en el contenedor?

k8s se ha convertido en el estándar para la contenedorización en la actualidad. Si bien disfruta de la eficiencia y la conveniencia que brindan los contenedores, las personas también encuentran algunos problemas: puede haber muchas formas diferentes de servidores proxy entre el cliente y el servidor de contenedores, cómo obtenerlo en el contenedor ¿Qué pasa con la IP de origen real del cliente? A continuación, discutimos cómo obtener la IP de origen para varios escenarios.

Introducción al principio:

Reenvío de cuatro capas:

Nodeport: el método de acceso al puerto del nodo es asignar el puerto del contenedor al puerto del nodo. Si la "afinidad del servicio" selecciona "nivel de clúster", se requiere un reenvío de servicio, no se puede obtener la IP de origen del cliente y no se reenvía el "modo de nodo". Obtenga la ip de origen del cliente.

ELB: el método de acceso ELB utiliza productos HUAWEI CLOUD ELB para lograr el equilibrio de carga. "Service Affinity" también requiere la selección de "Nivel de nodo". El ELB "compartido" necesita instalar el complemento TOA en el nodo y el ELB "exclusivo" La IP de origen se transmite de forma transparente de forma predeterminada, no se requiere ningún complemento TOA.

Reenvío de siete capas:

Ingress: cuando se accede a la aplicación en la Capa 7, la IP de origen del cliente se almacena en el campo "X-Fordered-For" del encabezado HTTP de forma predeterminada y no se requieren otras operaciones.

Operación específica:

Uno, equilibrio de carga (LoadBalancer)

En el modo de servicio de LoadBalancer, se deben cumplir los siguientes requisitos previos para admitir la obtención de la IP de origen en el contenedor:

1. Seleccione la afinidad de servicio "nivel de nodo" en lugar de "nivel de clúster".

2. Instale el complemento TOA en el nodo donde se encuentra el pod. (El ELB "exclusivo" no requiere las siguientes operaciones)

Los pasos para instalar el complemento TOA son los siguientes:

1) Prepare el entorno de compilación:

Ejecute el siguiente comando para instalar el compilador gcc.

] # yum instalar gcc

Ejecute el siguiente comando para instalar la herramienta de creación.

] # yum install make

2) Compilar el módulo del kernel

a) Descargue el código fuente del módulo del kernel TOA.

] # wget  https://github.com/Huawei/TCP_option_address/archive/master.zip  b) Ejecute el siguiente comando para ingresar al directorio fuente y compilar el módulo.

]# unzip master.zip
]# cd TCP_option_address-master/src/
]# make

No se muestra ninguna advertencia o error durante el proceso de compilación, lo que indica que la compilación se realizó correctamente. Compruebe si el archivo toa.ko se ha generado en el directorio actual.

Nota: Si un mensaje de error indica "config_retpoline = y pero no es compatible con el compilador, se recomienda la actualización del compilador", indica que la versión de gcc es demasiado antigua y se recomienda actualizar gcc a una versión más nueva.

3) Cargue el módulo del kernel

Ejecute el siguiente comando para cargar el módulo del kernel.

] # insmod toa.ko

Ejecute los siguientes comandos para verificar la carga del módulo y ver la información de salida del kernel.

] # dmesg | agarre TOA

Si el mensaje de solicitud contiene "TOA: toa cargado", el módulo del kernel se ha cargado correctamente.

4) Cargue automáticamente el módulo del kernel

Para que el módulo del kernel TOA sea efectivo cuando se inicia el sistema, se puede agregar el comando para cargar el módulo del kernel TOA al script de inicio del cliente.

Cree un nuevo archivo toa.modules en el directorio "/ etc / sysconfig / modules /". Este archivo contiene el script de carga del módulo del kernel TOA, consulte el siguiente ejemplo:

#!/bin/sh
/sbin/modinfo -F filename /root/toa/toa.ko > /dev/null 2>&1
if [ $? -eq 0 ]; then
/sbin/insmod /root/TCP_option_address-master/src/toa.ko
fi

Nota: "/root/TCP_option_address-master/src/toa.ko" es la ruta del archivo del módulo del kernel TOA, y los clientes deben reemplazarlo con la ruta del módulo del kernel TOA compilado por ellos mismos.

Ejecute el siguiente comando para agregar permisos ejecutables al script de inicio de toa.modules.

] # chmod + x /etc/sysconfig/modules/toa.modules

En este caso, la IP de origen del cliente se puede obtener del balanceo de carga de cuatro capas (puede verlo a través de netstat).

Punto de prueba: en este caso, puede usar netstat para ver la dirección IP del cliente conectado al POD.

Dos, acceso de nodo (NodePort)

La afinidad de servicio del tipo de servicio de acceso al nodo (NodePort) selecciona " nivel de nodo " en lugar de "nivel de clúster", es decir, la  spec.externalTrafficPolicy del servicio  debe establecerse en  Local .

Figura 1 Nivel de nodo de selección de afinidad de servicio

Equilibrio de carga de tres y siete capas (Ingress)

En el modo de equilibrio de carga de siete capas, la IP del cliente no se puede obtener en el equilibrio de carga de cuatro capas (la IP del cliente no se puede ver a través de netstat), y el servidor de aplicaciones debe configurarse y luego a través del x-forward en el encabezado http del equilibrio de carga de siete capas -olvidar.

La IP del visitante real se colocará en el campo X-Fordered-For del encabezado HTTP mediante el balanceo de carga, en el siguiente formato:

X-Forwarded-For: 来访者真实IP, 代理服务器1-IP,  代理服务器2-IP, ...

Punto de prueba: obtenga el encabezado de solicitud http "x-forward-for" del contenedor y la IP obtenida es la IP del cliente.

 

Haga clic para seguir y conocer la nueva tecnología de Huawei Cloud por primera vez ~

Supongo que te gusta

Origin blog.csdn.net/devcloud/article/details/108513106
Recomendado
Clasificación