Skip to content

Latest commit

 

History

History
51 lines (31 loc) · 4.57 KB

File metadata and controls

51 lines (31 loc) · 4.57 KB

TOP
前: サービスのボリュームマウント
次: サービスのヘルスチェック


サービスの外部公開

コンテナに外部からアクセスするにはコンテナとホストポートをマッピングします。

  1. 以下満たすcomposeファイルservice-expose.yamlを作成してください。(ヒント
  • service名: test
  • image: nginx
  • replicas: 1
  • port: ホストの8000をコンテナの80にマッピング(Long syntaxで設定する場合モードはingress)
  1. 上記作成したcomposeファイルを指定し、スタックtestを作成してください。

  2. スタックの一覧、スタック内のサービス一覧、スタック内のタスク一覧をそれぞれ表示し、タスクが1つデプロイされていることを確認してください。また、サービスが*:8000->80/tcpのように外部公開できていることを確認してください。タスクがスケジュールされたノード名も確認してください。

  3. ワーカーノードにつながる端末からcurlやブラウザなどを使用し<タスクを実行しているワーカーノードIP or ホスト名>:8000に接続してください。Welcome to nginx!が表示されることを確認してください。(もし接続できない場合、AWSの場合SecurityGroupで端末から8000へのインバウンドが許可されていることを確認してください。)

  4. ワーカーノードにつながる端末からcurlやブラウザなどを使用し<タスクを実行していないワーカーノードIP or ホスト名>:8000に接続してください。Welcome to nginx!が表示されることを確認してください。(もし接続できない場合、AWSの場合SecurityGroupで端末から8000へのインバウンドが許可されていることを確認してください。)

  5. マネージャノードにつながる端末からcurlやブラウザなどを使用しいずれかの<マネージャノードIP or ホスト名>:8000に接続してください。Welcome to nginx!が表示されることを確認してください。(もし接続できない場合、AWSの場合SecurityGroupで端末から8000へのインバウンドが許可されていることを確認してください。)

  6. サービスtestのレプリカ数を2に増やしてください。

  7. 各タスクを実行しているワーカーノードに接続し、サービスtestでデプロイされたコンテナの/usr/share/nginx/html/index.htmlの内容を以下のようにワーカーノードの名前などコンテナごとに一意となる内容に修正してください。

docker exec -it <container id> sh
echo <worker0 or 1> > /usr/share/nginx/html/index.html
  1. ワーカーノードにつながる端末からcurlやブラウザなどを使用し<ワーカーノードIP or ホスト名>:8000に複数回接続してください。結果がworker0worker1のようにランダムで表示されることを確認してください。(もし接続できない場合、AWSの場合SecurityGroupで端末から8000へのインバウンドが許可されていることを確認してください。)

  2. 同じcomposeファイルを指定し、スタッタtest2を作成してください。ポート8000がバッティングして作成に失敗することを確認してください。

  3. スタックtesttest2を削除してください。

このようにポートをマッピングしてコンテナを外部に公開できます。外部公開に使用するホストポートはクラスタ内のすべてのノードで使用されます。そのため同じクラスタで同じホストポートを使った外部公開はできません。また、外部からの通信はクラスタ内に構成されたルーティングメッシュを経由してコンテナに接続します。そのため、たとえアクセス先として指定したワーカーノード上でタスクが実行されていも別のワーカーノード上のタスクにルーティングされる可能性があります。ネタ元

解答例


TOP
前: サービスのボリュームマウント
次: サービスのヘルスチェック