Cómo gastar "un poco de dinero" para romper la "línea de defensa" del servicio Huawei Cloud CCE

Resumen: ¿Hay alguna manera de eludir las restricciones de CCE y llamar libremente a la API de K8? Algunos son más baratos, 2,4 yuanes / grupo / día.

Afirmar: Todo es para mejorar Huawei Cloud, no para disuadirlo.

¿Cuál es una buena manera de comprar varios clústeres de K8 a través de HUAWEI CLOUD y desea llamar a estos clústeres utilizando la interfaz nativa de K8? Actualmente, las API que utilizan servicios CCE siguen siendo la mejor opción. Pero al mismo tiempo, la API de CCE tiene muchas restricciones, como el límite actual de la API, y algunas interfaces nativas no están abiertas. ¿Hay alguna manera de eludir las restricciones de CCE y llamar libremente a la API de K8? Este artículo es para dar una forma de eludir la "línea de defensa". Bienvenido a intercambiar correcciones ~

1. Escenarios de uso + dificultades encontradas

Escenario de uso: tengo varios clústeres de K8. Mi "módulo de gestión" (es decir, el sistema principal, que es un sistema de procesamiento por lotes) se ejecuta en una VPC independiente, aislada de los K8 en funcionamiento. Luego, se llamará a la interfaz de K8s y la tarea de trabajo se entregará al clúster de K8s correspondiente para comenzar a trabajar. Como se muestra abajo:

Dificultades actuales: límite actual + algunas API no están expuestas. Así que espero que haya un canal amarillo en la imagen de arriba.

1.1 ¿Comprar un EIP para cada grupo K8s?

Obviamente, la viabilidad está bien. Pero esta solución no es buena:

(1) EIP requiere tarifas adicionales y el precio no es barato.

(2) EIP es la dirección de Internet. Está claro que todos mis programas están en Huawei Cloud, entonces, ¿por qué los paquetes circulan por Internet?

(3) El clúster K8s no quiere estar expuesto al exterior de Internet, lo que aumenta los riesgos de seguridad.

Entonces mira otras formas

1.2 Punto de enlace de VPC de servicio abierto de Huawei Cloud VPC

Sabemos que cross-vpc (especialmente vpc cross-tenant) se puede abrir a través del servicio vpc-endpoint de HUAWEI CLOUD.

Referencia: https://support.huaweicloud.com/productdesc-vpcep/zh-cn_topic_0131645196.html

Dado que EIP no es adecuado, tomemos la solución vpc-endpoint de toda la intranet de Huawei Cloud.

En segundo lugar, abra canales en las VPC

El plan general es utilizar vpc-endpoint para romper las restricciones de CCE API-Server.

El siguiente es el procedimiento:

2.1 VPCEP se conecta directamente a 3 K8s-Masters. (fracaso)

Cada clúster de CCE tendrá una dirección IP para el acceso a la intranet. La IP de su Master se puede ver en la interfaz.

Luego deje que vpc-endpoint se conecte directamente a esta IP, ¿no es el final?

Como se muestra abajo:

Aunque la idea es buena, la verdad es cruel.

(1) La dirección IP de la intranet proporcionada por CCE es una VIP (IP virtual), que a su vez se utiliza para garantizar la fiabilidad. Cuando un maestro cuelga, se desviará automáticamente a los otros 2 maestros.

(2) Después de la confirmación: Vpc-endpoint usa un túnel vxlan y usa un protocolo punto a punto. Es decir, vpcep eventualmente estará vinculado a la dirección IP real del nodo maestro. Cuando VIP se desvía, vpcep fallará (la detección de desviación automática no es compatible y debe volver a vincularse a un nuevo nodo).

Por lo tanto, no hay forma de conectar directamente 3 Masters a través de vpcep.

3. Conecte K8s-Master una vez mediante ELB Transit

Actualmente, el servicio vpcep solo puede interactuar con (1) instancias ELB o (2) backends ECS específicos.

Y aquí tenemos 3 nodos maestros, obviamente el tipo (2) no es adecuado. Así que vayamos (1) ejemplo de elb.

Siguiente == "Centrémonos en el análisis de" cómo conectar el clúster k8s a elb ".

3.1 Uso del CCE proporcionado: El servicio vincula la función elb. (fracaso)

K8s viene con un servicio para acceder a api-server.

Todos los contenedores del clúster pueden acceder al Master a través de esta dirección.

Luego nos conectamos a este servicio a través de elb, ¿no?

Según la documentación del CCE, la operación:

https://support.huaweicloud.com/usermanual-cce/cce_01_0014.html

Establezca uno para SVC: anotación, traiga el ID de instancia de elb. Subir ~

¿De acuerdo? Reportó un error. .

El controlador en k8s informó un error que decía: incluso el servicio de elb debe tener un selector.

Simplemente use elb para conectarse directamente al servicio "kubernetes" con "sin selector", el controlador CCE informará un error y de esta manera no funcionará. . .

Nota del maestro Tang: Significa que cuando se implementa el controlador, la compatibilidad considerada no es lo suficientemente fuerte. Cuando hay puntos finales, no debería ser necesario forzar un selector (porque el propósito del selector k8s es encontrar la dirección de destino, ya conocemos el destino aquí de antemano)

3.2 Utilice ELB para conectar 3 direcciones K8s-Master. (fracaso)

Dado que la implementación del servicio CCE tiene limitaciones, el maestro no puede conectarse directamente a elb. Luego, conectemos directamente 3 maestros desde la perspectiva de elb (el controlador de cce también está relacionado llamando a la api de elb).

Como se muestra abajo:

Sin embargo, los hechos terminaron en fracaso.

Motivo: Actualmente, el elb de HUAWEI CLOUD solo se puede conectar a la tarjeta de red principal de ECS, y las tarjetas de red de nuestros 3 nodos CCE Master son todas tarjetas de red esclavas. Como se muestra abajo:

La instancia de ELB no admite la conexión a la tarjeta de red (como se muestra a continuación). . .

Se dice que el elb (v3) de próxima generación de HUAWEI CLOUD admite la conexión de tarjetas de red esclavas. Entonces, actualmente, este camino no está en ninguna parte ~

Cuarto, encuentra otro tránsito Nginx

Elb no puede conectarse directamente al nodo maestro y elb debe conectarse al Servicio con un selector. Luego, solo puede implementar un contenedor de proxy adicional, use el selector para ir primero al contenedor de proxy y luego al maestro.

4.1 Monte el archivo de configuración de Nginx a través de Configmap. (fracaso)

Debe haber una configuración de conf para iniciar Nginx. Montamos el archivo de configuración nginx.conf en el contenedor Nginx a través de configmap.

¿De acuerdo? ¿Por qué está mal? El WAF de HUAWEI CLOUD bloqueó la API de CCE para crear Configmap. . .

Entonces, el inicio automático de Nginx (a través del servidor API de CCE) no funcionará.

4.2 Cree Configmap desde K8s y móntelo. (éxito)

Si no puede utilizar la interfaz de la API del servicio en la nube CCE, utilice la interfaz nativa dentro de K8.

# kubectl create configmap nginx --from-file=nginx.conf

El contenido de nginx.conf es el siguiente:

user  nginx;
worker_processes  1;
 
error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;
 
events {
    worker_connections  1024;
}
 
stream {
 
    log_format proxy '$remote_addr [$time_local] '
                 '$protocol $status $bytes_sent $bytes_received '
                 '$session_time "$upstream_addr" '
                 '"$upstream_bytes_sent" "$upstream_bytes_received" "$upstream_connect_time"';
 
    access_log /opt/software/nginx/logs/tcp-access.log proxy ;
    open_log_file_cache off;
 
         upstream kubeapi {
                   server kubernetes.default:443;
         }
 
         server {
                   listen 443;
                   proxy_connect_timeout 8s;
                   proxy_timeout 24h;
                   proxy_pass kubeapi;
         }
}

Se crea el mapa de configuración.

4.3 Inicie el contenedor Nginx y luego vpcep se conecta al contenedor. (fracaso)

El archivo de configuración está listo, luego comencemos Nginx (recuerde montar el mapa de configuración anterior).

Mi dirección de montaje de configmap es:

/etc/nginx/configmap

Comando de inicio del contenedor:

mv nginx.conf nginx.conf.bak; cp configmap/nginx.conf nginx.conf; mkdir -p /opt/software/nginx/logs; nginx &

Al iniciar la Implementación, cree un Servicio de tipo Loadbalancer (para que ELB se conecte al contenedor Nginx).

Puede ver que se ha creado la instancia de elb.

4.4 Comience a crear vpc-endpoint.

(1) Primero cree vpc-endpoint-service en el vpc de destino (es decir, la red vpc correspondiente al clúster K8s). Elija conectar nuestra instancia de elb.

Importante : en la configuración de permisos, recuerde permitir que otros se conecten. (Si se llama a la interfaz K8s entre inquilinos)

(2) Luego cree vpc-endpoint en el vpc del cliente (es decir, el vpc donde se encuentra el módulo de lógica de gestión).

Busque el servicio de punto final del paso (1) por nombre y vincúlelo correctamente:

Punto clave: aquí este vpc-endpoint necesita 1 centavo / hora. 2 yuanes al día, 4, el título dice que gastar algo de dinero está aquí.

(3) El vpc-endpoint creado es el siguiente:

Accedamos a este vpcep directamente desde el cliente (que representa directamente el contenedor Nginx).

Uh, no funciona. . .

4.5 Finalmente hecho

Después del posicionamiento: cuando el contenedor Nginx estaba vinculado a ELB, CCE no creó automáticamente el backend de elb (debería ser un pequeño error, mi versión de clúster también es relativamente antigua, solo 1.11).

Pase posterior: expanda el número de pods y active un comportamiento de backend backend de actualización elb: puede ver que hay respaldo

En este momento, finalmente puede acceder a la API del clúster CCE de destino a través de vpcep.

(El 401 anterior se debe a que no hay token. Está bien traer "Authorization: Bearer iam-token")

El diagrama de flujo completo para pasar es el siguiente:

En este punto, podemos acceder a la API de K8 en todos los inquilinos, en las VPC y en los clústeres a voluntad, sin pasar por el servidor CCE Api.

(Equivale a crear un "pseudo CCE-API-Server" por nosotros mismos)

Cinco, resumen

A través de canales cuidadosamente excavados, gastando 2,4 yuanes / grupo / día, puede pasar por alto la "línea de defensa" del servidor API del servicio CCE de HUAWEI y "desbloquear" la interfaz K8 que compró.

La clave es, para lograr el propósito de "llamar libremente a la interfaz de K8s", ¿vale la pena todos los baches en el camino? Al menos a partir de estas dificultades, Huawei Cloud todavía tiene mucho margen de mejora. Como:

(1) ¿Se pueden relajar las restricciones del servidor API?

(2) ¿ELB puede conectarse directamente a K8s-Master?

(3) ¿Se puede conectar el punto final de la VPC directamente al clúster de K8?

(4) El punto final de la VPC no puede proporcionar registros de mensajes y los usuarios no pueden solucionar los problemas por sí mismos.

(5) ¿Puede haber una función de "pseudo servidor API" más concisa para administrar múltiples clústeres de K8s?

Sin embargo, es porque alguien descubre el problema que es posible mejorar, ¿verdad? Gracias a todos, gracias ~

 

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/109096837
Recomendado
Clasificación