Как использовать Envoy в качестве баланса нагрузки для веб-службы Java? - PullRequest
0 голосов
/ 21 февраля 2019

Я пытаюсь установить Envoy в качестве балансировщика нагрузки для приложения Java.Ниже приведена настройка, которую я пытаюсь реализовать.

enter image description here

Я следовал Envoy Tutorial , чтобы получить представление и найти код,Там они используют внешний контейнер-посланник в качестве единой внешней службы для распределения трафика между многими внутренними контейнерами.Но для моей работы мне не нужен такой внешний контейнер.Поэтому я изменил код, и следующие файлы были созданы.

service-envoy.yaml

static_resources:
  listeners:
  - address:
      socket_address:
        address: 0.0.0.0
        port_value: 80
    filter_chains:
    - filters:
      - name: envoy.http_connection_manager
        config:
          codec_type: auto
          stat_prefix: ingress_http
          route_config:
            name: local_route
            virtual_hosts:
            - name: service
              domains:
              - "*"
              routes:
              - match:
                  prefix: "/service"
                route:
                  cluster: local_service
          http_filters:
          - name: envoy.router
            config: {}
  clusters:
  - name: local_service
    connect_timeout: 0.25s
    type: strict_dns
    lb_policy: round_robin
    hosts:
    - socket_address:
        address: 127.0.0.1
        port_value: 9000
admin:
  access_log_path: "/dev/null"
  address:
    socket_address:
      address: 0.0.0.0
      port_value: 8081

Dockerfile-Service

FROM envoyproxy/envoy-alpine:latest
FROM java:8

ADD gs-actuator-service-0.1.0.jar gs-actuator-service-0.1.0.jar

ADD ./start_service.sh /usr/local/bin/start_service.sh
RUN chmod u+x /usr/local/bin/start_service.sh
ENTRYPOINT /usr/local/bin/start_service.sh

start-service.sh

#!/bin/sh

java -jar gs-actuator-service-0.1.0.jar &
envoy -c /etc/service-envoy.yaml --service-cluster service${SERVICE_NAME}

docker-compose.yml

version: '2'
services:

  service1:
    build:
      context: .
      dockerfile: Dockerfile-service
    volumes:
      - ./service-envoy.yaml:/etc/service-envoy.yaml
    networks:
      envoymesh:
        aliases:
          - service1
    environment:
      - SERVICE_NAME=1
    expose:
      - "80"

networks:
  envoymesh: {}

gs-activator-service-0.1.0.jar - это файл jar, содержащий веб-службу.При запуске в localhost его можно вызвать с помощью

localhost:9000/prime?number=10

Когда я запускаю

sudo docker-compose up --build

, он выдает следующий вывод со строкой ошибки в конце.

Building service1
Step 1/6 : FROM envoyproxy/envoy-alpine:latest
 ---> 44b4a2e0acd8
Step 2/6 : FROM java:8
 ---> d23bdf5b1b1b
Step 3/6 : ADD gs-actuator-service-0.1.0.jar gs-actuator-service-0.1.0.jar
 ---> fee1f402b547
Step 4/6 : ADD ./start_service.sh /usr/local/bin/start_service.sh
 ---> 52c2cc17c4dd
Step 5/6 : RUN chmod u+x /usr/local/bin/start_service.sh
 ---> Running in 95ee0537c3d1
Removing intermediate container 95ee0537c3d1
 ---> d8e9bdb2f95e
Step 6/6 : ENTRYPOINT /usr/local/bin/start_service.sh
 ---> Running in 27b20f261c0f
Removing intermediate container 27b20f261c0f
 ---> 26080be0b5ea
Successfully built 26080be0b5ea
Successfully tagged frontproxy_service1:latest
Recreating frontproxy_service1_1 ... 
Recreating frontproxy_service1_1 ... done
Attaching to frontproxy_service1_1
service1_1  | /usr/local/bin/start_service.sh: 3: 
/usr/local/bin/start_service.sh: envoy: not found
frontproxy_service1_1 exited with code 127

Может кто-нибудь указать, где я неправильно понял?

Спасибо

1 Ответ

0 голосов
/ 23 мая 2019

Вы на Windows?Если да, проверьте все свои файлы с помощью Notepad ++, и в правом нижнем углу вы можете перейти с CR LF на LF.Измените его во всех файлах, сохраните и попробуйте запустить снова.

...