Как скрыть соединение API между микросервисами с помощью Docker? - PullRequest
0 голосов
/ 08 февраля 2019

Я новичок в Docker и настраиваю новое приложение, в котором у меня есть 2 службы для моего файла docker-compose:

# Contains all my API servers

api_load_balancer:  
    build: ./microservices/load_balancer
    restart: always
    ports:
    - "8080:80"

# Contains all my client servers

server_client:
    build: ./microservices/client
    ports:
    - "80:80"
    ....

Мой microservices / load_balancer nginx.conf выглядит так:

events { worker_connections 1024; }
http{
  include       /etc/nginx/mime.types;
  default_type  application/octet-stream;
  upstream api_nodes {
   server api_1:9000;
  }
  upstream socket_nodes {
    ip_hash;
    server socketio_1:5000;
  }


 # SERVER API
 server {
   location /socket.io/ {
     proxy_set_header Access-Control-Allow-Origin *;
     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
     proxy_set_header Host $host;

     proxy_pass http://socket_nodes;

     # enable WebSockets
     proxy_http_version 1.1;
     proxy_set_header Upgrade $http_upgrade;
     proxy_set_header Connection "upgrade";
  }
  location /api/ {
    proxy_set_header Access-Control-Allow-Origin *;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $host;

    proxy_pass http://api_nodes;
  }
 }
}

Мой load_balancer / Dockerfile выглядит следующим образом:

FROM nginx:alpine
COPY ./nginx.conf /etc/nginx/nginx.conf
COPY ./ssl ./etc/nginx/ssl
EXPOSE 80

Когда я пытаюсь подключиться с моего клиента, я могу сделать это с сервера моего клиента (используя соединение api_load_balancerстрока, поскольку они находятся в одной и той же сети докеров), но когда я пытаюсь сделать вызов из браузера, мне нужно изменить строку подключения на что-то вроде localhost: 8080 или some.ip.in.public.server: 8080.

Мне не нравится идея выставлять ни мой порт, ни мою конфигурацию API таким образом, так есть ли способ реализовать более прозрачное соединение между этими микросервисами?Я не знаю, возможно ли это сделать.

...