問題タブ [docker-ingress]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
docker - コンテナー間で動作する Windows Server 2019 イングレス ネットワークで Docker Swarm を取得できません
Windows Server 2019 でオーバーレイ ネットワークを使用したルーティング メッシュのサポートについて言及している投稿をいくつか見つけました (以下の参考文献を参照)。
多くのトラブルシューティングを行った結果、次のネットワークとサービスを使用して作成されたユーザー定義のオーバーレイ ネットワークで 2 つの単純なコンテナーを適切に構成できません。
ポート 80 で Docker ホストを参照すると、iis Web サイトにアクセスできますが、他のコンテナーが同じオーバーレイ ネットワーク上にある場合pingweb
、メイン コンテナーに ping を送信できません。web
また、pingweb コンテナーがオーバーレイ ネットワーク上にある場合は常に、外部サイトに ping を実行できないことにも気付きました。ping をテストしましたが、ネットワーク上のコンテナーにping を実行しようとしているときと8.8.8.8
同じ結果になるため、オーバーレイ ネットワークで実行すると機能しません。Request timed out
web
testnet
質問:
- これは既知の問題ですか?
- どうすればこれを機能させることができますか?
参考文献:
https://www.docker.com/blog/docker-windows-server-1709/
Windows での Docker イングレス モード サービスの公開
Linux サービスの公開オプションと同等であることは、Windows のお客様から強く要望されています。Windows Server 1709 でイングレス モードを使用したサービス公開のサポートを追加すると、Docker のルーティング メッシュを使用できるようになり、サービスのタスクを実行しているノードに関係なく、外部エンドポイントが swarm 内の任意のノードを介してサービスにアクセスできるようになります。
これらのネットワークの改善により、オーバーレイ ネットワークの使用時に VIP ベースのサービス ディスカバリのロックも解除されるため、Windows ユーザーは DNS ラウンド ロビンに制限されなくなります。
改善点の詳細については、Microsoft Virtualization ブログの対応する投稿を確認してください。
docker - Docker ノード レベルの負荷分散が機能しない
Ubuntu-14 と Mac (Big Sur) の 2 台のラップトップがあり、どちらにも Docker (swarm サポートあり) がインストールされています。
- Swarm マネージャーとして Ubuntu を使用し、ワーカー ノードとして Mac を使用しました。
- Ubuntu プライベート IP は 192.168.0.14 (および) Mac プライベート IP は 192.168.0.11 です [すべてのクラス C ネットワークが同じ IP を持っているため、プライベート IP は問題なくパブリックで共有できます:P]
- 「docker swarm init --advertise-addr」は、Ubuntu ホストであるマネージャーを作成するために使用したコマンドであり、Mac で join コマンドを入力して、Mac ノードを Swarm にワーカーとして参加させました。
したがって、大まかに言うと、docker-compose.yml (Python Web サービスが 1 つしかない) を使用しました。Compose ファイルを使用して、「docker スタック」を開始し、「python webservice」インスタンスを 5 に複製しました。これらのアクションはすべて Manager ノードで実行されました。
Ubuntu Manager Node (同じく 2 つのコンテナー インスタンスがあり、ワーカーとして動作) (および) Mac Node には、「python webservice」の 3 つのコンテナー インスタンスがありました。「ポート」を「80:1234」に設定しました。つまり、ホスト マシンのポート 80 にアクセスすると、コンテナ内で実行されている 1234 の「python アプリケーション Web サービス ポート」にリダイレクトされます。
Manager IP (192.168.0.14:80) を約 50 回ヒットし、Mac と Ubuntu の両方で 5 つのコンテナーすべてのログを確認したところ、Ubuntu で 2 つのコンテナーすべてが見つかり、それぞれ 25 ヒットを取得しました (ラウンドで) robin fashion) しかし、Mac マシンに存在するコンテナーのログは見つかりませんでした。
これは予期される動作ですか?
- Mac マシン (ワーカー) の IP アドレス (192.168.0.11:80) を直接ヒットした場合にのみ、Mac マシンに存在するコンテナーのログ/リクエスト ヒットを取得できました。
ここでは 2 種類の負荷分散が行われます。
(ワーカー/マネージャーの) IP:port にアクセスすると、そのワーカー/マネージャー マシンに存在するコンテナーのみが負荷分散され、ラウンドロビン方式で提供されます (使用されているアルゴリズムであることがわかります)。この負荷分散タイプを「コンテナ レベルのロード バランサー」と名付けましょう。
しかし、192.168.0.14 (マネージャー IP) に達したとき、2 つのノードにデプロイされた 5 つのコンテナーすべてで負荷が分散されると予想しました。どういうわけかこれはうまくいきませんでした。「ノードレベルのロードバランサー」と呼びましょう
私はこれについてグーグルでたくさん検索しようとしましたが、何も見つかりませんでした。ほとんどのサイトは、「ノード レベルのロード バランサー」を解決するために、Nginx、HaProxy ロード バランサーなどの外部テクノロジを使用しています。
ドッカー自体による、これに対するすぐに使えるサポートはありませんか?
EDIT 1 - Metin がコメント セクションで尋ねたので、docker-compose.yml を追加しました
docker-compose.yml
docker - Ingress Nginx が 400 Bad Request (auth-url response) ではなく 500 Internal Server Error を返す
401,402, 403..etc HTTP ステータス応答が auth-url から受信されたときはいつでも、400 イングレスがクライアントに正しく認証応答を送信していますが、500 内部サーバー エラーとして送信され、クライアントに認証応答が返されない 400 不正な要求入力の場合*
入力ファイル、ログ、応答を見つけてください
入力ファイル
イングレス ログ
401,402, 403..etc HTTP ステータス応答が auth-url から受信された場合は常に、400 イングレスを除いてクライアントに auth 応答が適切に送信されますが、400 Bad Request イングレスの場合は 500 Internal Server Error として送信され、クライアントに auth 応答が返されません。