Proxy inverso al contenedor local

Proxy inverso al contenedor local

Necesito ejecutar Kafka en la ventana acoplable con la interfaz de usuario web en algún dominio Y ENLACE específico, por ejemplo:

http://somesite.com/kafka

Estoy usando este docker-compose.yml.

version: '3.3'
services:
  zookeeper:
    image: 'bitnami/zookeeper:latest'
    ports:
      - '2181:2181'
    environment:
      - ALLOW_ANONYMOUS_LOGIN=yes
  kafka:
    image: 'bitnami/kafka:latest'
    ports:
      - '9092:9092'
    environment:
      - KAFKA_BROKER_ID=1
      - KAFKA_CFG_LISTENERS=PLAINTEXT://:9092
      - KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://127.0.0.1:9092
      - KAFKA_CFG_ZOOKEEPER_CONNECT=zookeeper:2181
      - ALLOW_PLAINTEXT_LISTENER=yes
    depends_on:
      - zookeeper
  kafka-ui:
    image: 'provectuslabs/kafka-ui:latest'
    environment:
      - KAFKA_CLUSTERS_0_NAME=local
      - KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS=kafka:9092
      - KAFKA_CLUSTERS_0_ZOOKEEPER=zookeeper:2181
    depends_on:
      - kafka
    networks:
      - default
    ports:
      - '9099:8080'

Cuando lo configuro apache2por dominio directo kafka.somesite.com, está funcionando.

<VirtualHost *:80>
  ServerName kafka.somesite.com
  ProxyPreserveHost On
  ProxyPass / http://127.0.0.1:9099/
  ProxyPassReverse / http://127.0.0.1:9099/
</VirtualHost>

Pero cuando intento configurar el dominio con el enlace somesite.com/kafka, solo aparece la pantalla en blanco.

<VirtualHost *:80>
  ServerName somesite.com
  ProxyPreserveHost On
  ProxyPass /kafka http://127.0.0.1:9099/
  ProxyPassReverse /kafka http://127.0.0.1:9099/
</VirtualHost>

¿Cómo puedo hacer que Kafka funcione con un enlace?

Gracias.

Respuesta1

Tienes que cambiar dos cosas. Primero, necesita configurar la URL base del contenedor kafka-ui, puede hacerlo usando elSERVER_SERVLET_CONTEXT_PATHVariable ambiental.

# ...
  kafka-ui:
    image: 'provectuslabs/kafka-ui:latest'
    environment:
      - KAFKA_CLUSTERS_0_NAME=local
      - KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS=kafka:9092
      - KAFKA_CLUSTERS_0_ZOOKEEPER=zookeeper:2181
      - SERVER_SERVLET_CONTEXT_PATH=/kafka
# ...

Si no lo hace, todas las URL generadas por kafka-ui comenzarán en /, lo que dará como resultado que CSS, JavaScript y similares se obtengan /en lugar de /kafka/.

Entonces necesitas adaptar la ProxyPassdirectiva a ese camino:

ProxyPass /kafka/ http://127.0.0.1:9099/kafka/
ProxyPassReverse /kafka/ http://127.0.0.1:9099/kafka/

Asegúrese ProxyPasssiempre de que las barras finales coincidan,como se indica en la documentación:

Si el primer argumento termina con una / final, el segundo argumento también debe terminar con una / final, y viceversa. De lo contrario, las solicitudes resultantes al backend pueden omitir algunas barras diagonales necesarias y no ofrecer los resultados esperados.

Respuesta2

ServerName aún debería ser somesite.com, porque Apache todavía lo espera como URL base. Cuando la URL sea somesite.com/kafkadebería redirigirla ahttp://127.0.0.1:9099/

En pocas palabras, la segunda configuración debería funcionar siempre que establezcaServerName somesite.com

información relacionada