09_use swarm mode routing mesh

2837 ワード

docker engine swarm modeは、クラスタの外部にアクセスできるように、サービスのポートを簡単にパブリッシュできます.すべてのノードは同じルーティンググリッドにあります.ルーティング・グリッドは、各ノードがクラスタ上の任意のサービスのポートを受信できるようにする.このノードにタスクがなくても走っています.ルーティング・グリッドは、使用可能なすべてのノードの上で、パブリッシュされたポートの使用可能なコンテナにすべてのアクセス要求をルーティングします.
ルーティング・グリッドの機能を使用するには、ノード間で次のプロトコルとポートを開く必要があります.
ポート7946 TCP/UDPコンテナネットワーク発見
ポート4789 UDPコンテナ内部ネットワーク
1つのサービスでポートをパブリッシュ
--publish
$ docker service create \
  --name  \
  --publish : \
  

例:内部コンテナnginxの80ポートを外部の8080ポートにパブリッシュする
$ docker service create \
  --name my-web \
  --publish 8080:80 \
  --replicas 2 \
  nginx

swarmクラスタの8080ポートにアクセスすると、swarmは要求負荷を使用可能なすべてのコンテナに等化します.
ルーティング・グリッドは、ノードに割り当てられた任意のIPのパブリケーション・ポートをリスニングします.外部のルーティングIPアドレスであれば、ポートは外部にもアクセスできます.他のIPアドレスへのアクセスは、ホストに対してのみ使用可能です.
存在するサービスでポートをパブリッシュできます
$ docker service update \
  --publish-add : \
  
             

$ docker service inspect --format="{{json .Endpoint.Spec.Ports}}" my-web
[{"Protocol":"tcp","TargetPort":80,"PublishedPort":8080}]

個別のTCPポートまたはUDPポートを発行
デフォルトで公開されているポートはTCPポートです.UDPポートを定義する場合は、次の構成で使用できます.
TCPポートのみ定義
$ docker service create --name dns-cache -p 53:53 dns-cache
$ docker service create --name dns-cache -p 53:53/tcp dns-cache

TCPとUDPポートの同時定義
$ docker service create --name dns-cache -p 53:53/tcp -p 53:53/udp dns-cache

UDPポートのみ定義
$ docker service create --name dns-cache -p 53:53/udp dns-cache

外部の負荷イコライザの構成
外部の負荷イコライザを構成して、すべてのリクエストをswarmサービスにルーティングできます.
たとえば、HAproxyを構成して、nginxの外部ポート8080にすべての要求を均等にすることができます.
この場合、8080ポートは、負荷イコライザとswarmクラスタの間でオープンである必要があります.
swarmノードにはプライベートなネットワークが存在し、エージェントサーバのみでアクセスでき、直接外部にアクセスすることはできません.
このノードにタスクがなくても、負荷イコライザを構成してすべてのリクエストを各ノードに等化できます.
たとえば、HAproxyの構成は次のようになります.
/etc/haproxy/haproxy.cfg:
global
        log /dev/log    local0
        log /dev/log    local1 notice
...snip...
# Configure HAProxy to listen on port 80
frontend http_front
   bind *:80
   stats uri /haproxy?stats
   default_backend http_back
# Configure HAProxy to route requests to swarm nodes on port 8080
backend http_back
   balance roundrobin
   server node1 192.168.99.100:8080 check
   server node2 192.168.99.101:8080 check
   server node3 192.168.99.102:8080 check

HAproxy負荷イコライザの80ポートにアクセスすると、swarmクラスタのノードにリクエストが転送されます.swarmルーティングメッシュは、使用可能なノードにルーティング要求されます.swarm schedulerスケジューリングタスクが異なるノードに要求された場合、負荷イコライザを再構成する必要はありません.
swarmノードのリクエストをルーティングするために、任意のタイプの負荷イコライザを構成できます.