Proxy reverso para contêiner local

Proxy reverso para contêiner local

Preciso executar o Kafka no docker com UI da web em algum domínio E LINK específico, por exemplo:

http://somesite.com/kafka

Estou 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'

Quando defino apache2por domínio direto 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>

Mas quando tento definir o domínio com o link somesite.com/kafka, só aparece uma tela em branco.

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

Como posso tornar o Kafka funcional com link?

Obrigado.

Responder1

Você tem que mudar duas coisas. Primeiro, você precisa configurar o URL base do contêiner kafka-ui, você pode fazer isso usando oSERVER_SERVLET_CONTEXT_PATHvariável de ambiente.

# ...
  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
# ...

Caso contrário, todos os URLs gerados pelo kafka-ui começarão em /, resultando na busca de CSS, JavaScript e outros /em vez de /kafka/.

Então você precisa adaptar a ProxyPassdiretiva para esse caminho:

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

Sempre ProxyPasscertifique-se de que as barras finais correspondam,conforme observado na documentação:

Se o primeiro argumento terminar com um / final, o segundo argumento também deverá terminar com um / final e vice-versa. Caso contrário, as solicitações resultantes para o backend poderão perder algumas barras necessárias e não entregar os resultados esperados.

Responder2

ServerName ainda deve ser somesite.com, porque o Apache ainda espera isso como URL base. Quando o URL estiver, somesite.com/kafkaele deve redirecioná-lo parahttp://127.0.0.1:9099/

Resumindo, a segunda configuração deve funcionar contanto que você definaServerName somesite.com

informação relacionada