es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Permita que un contenedor acceda a otro mediante helm/Docker.

El contexto

Avísame si me he adentrado en un laberinto aquí.

Tengo una aplicación web simple con un componente de frontend y otro de backend, desplegada usando Docker/Helm dentro de un clúster de Kubernetes. El frontend se sirve a través de nginx y el componente de backend ejecutará un microservicio de NodeJS.

Había estado pensando en hacer que ambos se ejecuten en el mismo pod dentro de Docker, pero encontré algunos problemas al ejecutar tanto nginx como Node en segundo plano. Podría intentar tener un script de inicio que ejecute ambos, pero Internet dice que es una buena práctica tener diferentes contenedores responsables de ejecutar solo un servicio, por lo que se necesita un contenedor para ejecutar nginx y otro para ejecutar el microservicio.

El problema

Eso está bien, pero supongamos que las páginas HTML del servidor nginx necesitan saber a qué dirección IP enviar una solicitud POST en el backend – ¿cómo pueden las páginas HTML saber a qué dirección IP acceder para el contenedor de Docker del backend? Se encuentran artículos como este que hablan de crear manualmente una red de Docker para que los dos contenedores puedan comunicarse entre sí, pero ¿cómo puedo configurarlo con Helm para que el contenedor de frontend sepa cómo acceder al contenedor de backend cada vez que se despliega un nuevo contenedor, sin tener que configurar manualmente ningún servicio de red cada vez? Quiero que los despliegues sean automatizados.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Solución

    Para resolver este problema, puedes definir un servicio de Kubernetes para tu microservicio de backend, y luego utilizar el nombre del servicio como el nombre DNS para el backend dentro de tus páginas HTML. Kubernetes automáticamente creará un registro DNS para el nombre del servicio que se resuelve a la dirección IP del contenedor del backend.

    Para lograr esto, puedes definir un archivo YAML de servicio para tu backend de la siguiente manera:

    apiVersion: v1
    kind: Service
    metadata:
      name: backend-service
    spec:
      ports:
      - name: http
        port: 80
      selector:
        app: backend
    

    Ten en cuenta que el campo “selector” debe coincidir con las etiquetas asignadas a tu despliegue de backend. Esta definición de servicio expondrá el puerto 80 de tu despliegue de backend a otros contenedores dentro del clúster de Kubernetes.

    Ahora, en tus páginas HTML del frontend, puedes utilizar el nombre DNS backend-service como el punto final para tus solicitudes POST, por ejemplo:

    <form action="http://backend-service/api/endpoint" method="POST">
    

    Esto asegurará que sin importar cuántas veces se despliegue un nuevo contenedor, siempre y cuando tenga la etiqueta correcta y sea parte del mismo clúster, podrá comunicarse con el microservicio de backend sin necesidad de ninguna configuración manual de servicios de red.

    También puedes definir el archivo YAML del servicio como parte de tu gráfico de Helm, para que se despliegue automáticamente junto con tu microservicio de backend.

Comments are closed.