Docker Swarm 外部検証ロードバランシングが機能しない場合の解決策

Docker Swarm 外部検証ロードバランシングが機能しない場合の解決策

問題の説明

Centos7 をローカルにインストールして 3 つの仮想マシンを作成し、Swarm クラスターを初期化しました。つまり、マネージャー ノード 1 つとワーカー ノード 2 つです。3 つのマシンの IP アドレスは、 192.168.124.8 - (manager節點)192.168.124.9 - (worker節點)192.168.124.10 - (worker節點)です。

[root@localhost ~]# docker node ls
ID ホスト名 ステータス 可用性 マネージャ ステータス エンジン バージョン
j0f4up8v7epacp3vceby4exsz localhost.localdomain 準備完了 アクティブ 19.03.13
qeeqc10gl9e56w61pajjqle08 localhost.localdomain 準備完了 アクティブ 19.03.13
r5sg5m9dkwcu76t56hg0vu29t * localhost.localdomain 準備完了 アクティブ リーダー 19.03.14

次に、次のコマンドでSwarmクラスタ上でサービスを開始しました。

docker サービス作成 --name test-vote --replicas 2 --constraint node.role==worker --publish 8080:80 registry.cn-hangzhou.aliyuncs.com/anoy/vote

ワーカーノードの ip:port を直接 curl すると応答が得られますが、返される containerId は変更されず、マネージャーノードに直接アクセスすると応答が得られず、ロードバランシングが有効になっていないようです。

解決する

少し検索した後、スタックオーバーフローで答えを見つけました: https://stackoverflow.com/questions/48360577/docker-swarm-mode-routing-mesh-not-working

結局、ファイアウォールの問題であることが判明しました。ドキュメントによると、 swarm mode routing mesh有効にするには、スウォーム クラスターを初期化する前に、 tcp/udpポート7946udpポート4789を開く必要があります。https://docs.docker.com/engine/swarm/ingress/

したがって、CentOS の場合は、次のスクリプトを使用してポートを開くことができます。Swarm クラスター内の各ホストを開く必要があります。便宜上、TCP ポートと UDP ポートの両方が開かれています。ポートを開いたら、マシンを再起動する必要があります。

ファイアウォールコマンド --permanent --zone=public --add-port=4789/tcp && \
ファイアウォールコマンド --permanent --zone=public --add-port=7946/tcp && \
ファイアウォールコマンド --permanent --zone=public --add-port=4789/udp && \
ファイアウォールコマンド --permanent --zone=public --add-port=7946/udp && \
ファイアウォール-cmd --reload && \
# 再起動 sudo reboot

これで、docker swarm 外部検証ロード バランシングが有効にならないというこの記事は終わりです。docker swarm ロード バランシングに関するより関連性の高いコンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Docker Swarm のサービス検出と負荷分散の原則の詳細な説明
  • docker swarm は指定されたノード上で指定されたコンテナをどのように実行しますか?
  • docker swarm クラスターの障害と例外の詳細な説明
  • Docker Swarmを使用してクラスターを構築する方法
  • Docker 1.12 を使用してマルチホスト Docker Swarm クラスターを構築する詳細な説明

<<:  CSSでnグリッドレイアウトを実装する方法

>>:  ES6の新機能に関する最もよく使われる知識ポイントのまとめ

推薦する

Vue は、デスクトップから Web ページにファイルをドラッグするためのサンプル コードを実装します (画像/オーディオ/ビデオを表示できます)

効果使用する場合は、コードとスタイルを自分で最適化してください。画像を表示しない/ビデオとオーディオ...

サブメニューをクリックする効果を実現するJavaScript

この記事では、クリック時にサブメニューを表示するためのJavaScriptの具体的なコードを参考まで...

Mysql binlog ログファイルが大きすぎる場合の解決策

目次1. 関連するbinlog設定2. binlogに関する詳細設定2.1 バイナリログモードの変更...

Alibaba Cloud Server に MySQL データベースをインストールする詳細なチュートリアル

目次序文1. MySQLをアンインストールする2. MySQLをインストールする要約する序文学習中に...

複数の無関係なテーブルからデータをクエリし、MySQL でページングする方法

MySQL 複数の無関係なテーブルクエリデータとページング機能要件主キーと外部キーの関連付けがない ...

タブバーのいくつかの実装方法(推奨)

タブ: カテゴリ + 説明タグバー: カテゴリ => ユーザーに現在地と目的地を知らせる1. ...

js は丸で囲まれた数字のリストのサンプルコードを動的に追加します

1. まず本文にulタグを追加します <!-- 順序なしリスト --> <ul i...

組み込みオブジェクトに関するJavascriptの基礎

目次1. 組み込みオブジェクトの紹介1.1 数学オブジェクト1.2 数学における方法1.3 日付オブ...

MySQLは現在の日付と時刻を取得する関数

現在の日付 + 時刻 (日付 + 時刻) を取得する関数: now() mysql> now(...

Nginx でバージョン番号を隠す方法

Nginx はバージョン番号を非表示にする実稼働環境では、セキュリティ上の脆弱性の漏洩を避けるために...

ビジュアルデザインとインタラクションデザインについて

<br />製品設計プロセス全体において、ビジュアルデザインとインタラクションデザインの...

シンプルな計算機を実装する JavaScript コード

この記事では、参考までに、簡単な計算機を実装するためのJavaScriptの具体的なコードを紹介しま...

MySQLシリーズのMariaDBサーバーのインストール

目次チュートリアルシリーズ1. yumパッケージマネージャーを使用してMariaDBサーバーをインス...

JavaScriptとTypeScriptの関係

目次1. JavaScript とは何ですか? 2. JavaScript は何に使用されますか? ...

React NativeとiOSの相互作用の詳細な説明

目次前提条件RNはiOSに価値を渡す方法1: ネイティブに値を通常通り渡す方法2: コールバック関数...