영사 DNS를 사용하여 서비스 검색을 작동 시키려고합니다. swarm에 필요한 키 / 값 쌍 백엔드로 작동하고 다른 컨테이너에 대한 서비스 검색 백엔드로 작동하는 consul 클러스터가있는 도커 스웜을 설정했습니다.
Docker 엔진이 설치된 3 개의 베어 서버로 시작합니다. ansible을 사용하여 클러스터를 프로비저닝하고 있습니다.
지금까지이 클러스터를 설정하는 프로세스는 다음과 같습니다.
- docker를 설치할 때
--cluster-store=consul://127.0.0.1:8500
docker 데몬 opts에서 설정 하십시오. - "기본"클러스터 노드에서 "-bootstrap-expect 3"모드로 영사 서버 컨테이너를 시작하십시오.
- "보조"클러스터 노드에서 "-join"모드로 영사 서버 컨테이너를 시작하십시오.
- 각 클러스터 노드에서 웜 마스터 및 웜 에이전트 컨테이너를 시작하여 동일한 호스트의 로컬 영사 서버를 가리 킵니다.
영사 서버를 시작할 때 다음과 같이 모든 영사 포트를 호스트에 매핑합니다.
version: '2'
services:
consul:
image: progrium/consul
hostname: "{{ ansible_hostname }}"
ports:
# Explanation of ports needed: http://stackoverflow.com/a/30692226/1514089
- "8300:8300" # This is used by servers to handle incoming requests from other agents
- "8301:8301/tcp" # This is used to handle gossip in the LAN. Required by all agents
- "8301:8301/udp" # This is used to handle gossip in the LAN. Required by all agents
- "8302:8302/tcp" # This is used by servers to gossip over the WAN to other servers
- "8302:8302/udp" # This is used by servers to gossip over the WAN to other servers
- "8400:8400" # This is used by all agents to handle RPC from the CLI
- "8500:8500" # This is used by clients to talk to the HTTP API
- "8600:8600" # Used to resolve DNS queries
restart: always
command: "{{ consul_command }}"
이것은 나에게 일하는 도커 떼를 얻는다. 클러스터 노드 중 하나에 로그인하고 도커 작성을 사용하여 응용 프로그램을 가져올 수 있으며, 웜은 서버간에 투명하게 균형을 유지합니다.
이제는 웜의 각 컨테이너 내부에서 서비스를 해결하기 위해 영사 DNS 기능을 사용하기 시작하고 싶습니다.
$ docker run -it ubuntu dig consul.service.consul
몇 가지를 시도했지만 작동하지 않아 도커 네트워크와 관련이 있다고 생각합니다. 설명하겠습니다 ...
consul 서버를 시작하면 docker-compose로 시작하기 때문에 자체 docker-compose 네트워크에 연결됩니다. 그러나 스웜이 아직 작동하지 않기 때문에 아직 멀티 호스트 오버레이 네트워크가 설정되어 있지 않습니다. 따라서 각 영사 컨테이너는 자체 호스트 전용 브리지 네트워크에있게됩니다. 웜 이 부트 스트랩 된 후에 만 도커 네트워크를 만듭니다 . 떼가 올라온 후 오버레이 컨테이너에 영사 컨테이너를 추가 할 수 없었습니다.
Error response from daemon: No such container: swarm-node-1/swarmconsul_consul_1
컨테이너 내에서 DNS 기반 서비스 검색을 수행하려면 어떻게해야합니까?