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の新機能に関する最もよく使われる知識ポイントのまとめ

推薦する

CentOS システムのディスク パーティションを拡張する方法

問題/障害/シナリオ/要件Eve-ng の仮想マシン OVA のハードディスクは 38G しかないた...

nginx rewriteを使用してURLをリダイレクトする方法

最近仕事でnginxの設定を変更する必要が頻繁にあり、nginxでrewriteを使用する方法を学び...

MySQLループは数千万のデータを挿入する

1. テストテーブルを作成する テーブル `mysql_genarate` を作成します ( `id...

CSS グリッドレイアウトを使用してレスポンシブな縦棒グラフを作成する方法

私はしばらくの間チャートをいじっていましたが、好奇心から、CSS を使用してチャートを作成するより良...

JavaScript のクロージャによって発生する問題を回避する

閉鎖による問題を回避するためのletについてオブジェクト指向の考え方を使用して、購入者情報の削除機能...

HTMLを教える記事

アーティストになるつもりがない場合は、開発者として HTML を読んで、必要に応じて簡単な変更を加え...

エラー 2002 (HY000): ソケット '/tmp/mysql.sock' 経由でローカル MySQL サーバーに接続できません

エラーメッセージ:エラー 2002 (HY000): ソケット '/tmp/mysql.so...

VUE+SpringBootはページング機能を実装します

この記事では主に、Vue + SpringBoot でページ分割されたリストデータを実装する方法を紹...

MySQLデータベーステーブルの容量を確認する方法の例

この記事では、MySQL のデータベース テーブルの容量を確認するためのコマンド ステートメントを紹...

iframe テクニックを使用して訪問者 QQ 実装のアイデアとサンプル コードを取得する

今日、仕事中に、一時的に追加した友人から、Web ページを使用して訪問者の QQ を取得する方法を尋...

JavaScript プロトタイプオブジェクトの this ポイント問題の詳細な説明

目次1. これは2. この点を修正する1. call() メソッド2. apply() メソッド要約...

高度な CSS の 3 つの方法を使用して複数行の省略を実装するサンプル コード

序文これは古くからの要望ですが、オンラインで解決策を探している人はまだ多く、特に検索結果の上位にラン...

localStorageの有効期限を設定するいくつかの方法

目次問題の説明1. 基本的な解決策2. 中間的な解決策3. 高度なソリューション4. ハードコアソリ...

PC/Pad/Phoneデバイスに自動的に適応するCSSウェブページレスポンシブレイアウト

序文最近は、PC、iPad、携帯電話、スマートウォッチ、スマートテレビなど、さまざまなデバイスが存在...

MySQL 演算子の具体的な使用法 (and、or、in、not)

目次1. はじめに2. 本文2.1 および演算子2.2 または演算子2.3 オペレーター2.4 no...