У меня есть несколько простых REST API-сервисов, реализованных в Express. Эти сервисы работают в док-контейнерах в режиме роя. Также я пытаюсь использовать шлюз Express-API с этими сервисами. Шлюз Express API также работает в контейнере как часть роя Docker. Далее следует файл Dockercompose
version: "3"
services:
firstService:
image: chaitanyaw/firstrepository:first
deploy:
replicas: 3
restart_policy:
condition: on-failure
ports:
- '3000:3000'
networks:
- webnet
apiGateway:
image: firstgateway:latest
deploy:
restart_policy:
condition: on-failure
ports:
- '80:80'
networks:
- webnet
visualizer:
image: dockersamples/visualizer:latest
ports:
- 8080:8080
volumes:
- /var/run/docker.sock:/var/run/docker.sock
deploy:
placement:
constraints: [node.role == manager]
networks:
- webnet
networks:
webnet:
также, следующий файл gateway.config
http:
port: 80
admin:
port: 9876
hostname: localhost
apiEndpoints:
api:
host: 192.168.99.100
paths: '/ip'
localApi:
host: 192.168.99.100
paths: '/'
serviceEndpoints:
httpbin:
url: 'https://httpbin.org'
services:
urls:
- 'http://192.168.99.100:3000/serviceonerequest'
- 'http://192.168.99.100:3000/servicetwo'
policies:
- basic-auth
- cors
- expression
- key-auth
- log
- oauth2
- proxy
- rate-limit
pipelines:
default:
apiEndpoints:
- api
policies:
# Uncomment `key-auth:` when instructed to in the Getting Started guide.
# - key-auth:
- proxy:
- action:
serviceEndpoint: httpbin
changeOrigin: true
customPipeline:
apiEndpoints:
- localApi
policies:
- proxy:
- action:
serviceEndpoint: services
changeOrigin: true
ip '192.168.99.100' - это ip док-машины.
Если я запускаю стек, используя вышеуказанный файл gateway.config, все работает нормально.
Однако, если я заменю
services:
urls:
- 'http://192.168.99.100:3000/serviceonerequest'
- 'http://192.168.99.100:3000/servicetwo'
с
services:
urls:
- 'http://services_firstService:3000/serviceonerequest'
- 'http://services_firstService:3000/servicetwo'
У меня плохой шлюз!
Этот док-рой запускает оверлейную сеть "webnet". Итак, я должен иметь возможность использовать имя службы в качестве имени хоста в файле gateway.config согласно этой ссылке .
В приведенном выше рабочем случае с использованием IP сервисы становятся доступными «за пределами» шлюза, который я не желаю.
Что не так?