Я пытаюсь установить Envoy в качестве балансировщика нагрузки для приложения Java.Ниже приведена настройка, которую я пытаюсь реализовать.
Я следовал 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
Может кто-нибудь указать, где я неправильно понял?
Спасибо