質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

nginx

nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Q&A

解決済

2回答

2476閲覧

Kubernetes | nginxがバックエンドの手前にもあることに対する疑問。

退会済みユーザー

退会済みユーザー

総合スコア0

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

nginx

nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

0グッド

0クリップ

投稿2019/02/22 13:09

知りたいこと

この本でDockerKubernetesのキャッチアップをしています。
イメージ説明
書籍内に下記のK8S構成のTODOアプリケーションがあるのですが、
Nginxが2つあることがとても気になりました。

イメージ説明
特に「赤部分」のNginxがとても気になります。
ちなみに下記画像赤色Nginxの隣のAPIはnodeJSです。

気になる理由

表現が難しいのですが、

  • todowebノード: Webの手前にnginxがあるのはわかる
  • todoapiノード: APIの手前にnginxがあるのはわからない

という感じです。というのも以前Railsのアプリをデプロイした際に、

  • Webサーバーに Nginx
  • アプリケーションサーバに Unicorn

を利用しました。このRailsのデプロイ環境は基本的なWeb三層かと思いますが、
当然ウェブサーバーとアプリケーションサーバが異なるソフトを用いています。

しかし上記K8S環境において、どうしてバックエンド手前にウェブサーバーがあるのか
いまいち説明ができません。ざっくばらんな質問になりますが、
インフラに詳しい方ご教授を頂けると幸いです。

よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

コンテナのデザインパターンの1つ、アダプターパターンに従ったものです。

コンテナ/マイクロサービスの分野におけるデザインパターンとしては、
論文「Design patterns for container-based distributed systems
が非常に有名でここで紹介されています。

アダプターパターンのメリットは外部からのアクセスを標準化することです。
APIのようなサービスは必要に応じて追加される可能性が高いですが
このAPIの実装(node/rails/golang/...)によってアクセス方法が異なると面倒です。
全部ゼロから作るのであればインタフェースを予め定めてそれに合わせて実装するのがよいですが、
当然既存アプリやOSSなどを流用するとき、その修正が必要になると面倒です。

これを解決するために同一pod内にインタフェースを変換するアダプターとして
nginxプロキシを導入すると既存のアプリは修正なしに
インタフェースを統一し利便性を向上することができます。

投稿2019/02/22 21:40

編集2019/02/22 21:46
thaim

総合スコア175

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/03/01 12:19

ご回答ありがとうございます。リバースプロキシ用途nginxの必要性が 絶対なのか疑問だったのですがthaimさんのご回答でその疑問が解消されてきました。 「Design patterns for container-based distributed systems」を読んで より理解を深めたいと思います。
guest

0

todoweb側が分からないけどhtmlやJavaScriptとすると
静的なファイルを配信するためのウェブサーバー。
http://example.com/

todoapiは別ドメインで動かしてると考えれば分かりやすいかも。
http://api.example.com/
8080ポートで動かしてるnodeを80にリバースプロキシするためにnginxが必要。

Railsでもフロントを分離すれば同じことになる。
この場合Railsはtodoapiなのでnginx使ってる部分はそのまま。

投稿2019/02/22 14:09

kawax

総合スコア10377

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/03/01 12:12

ご回答ありがとうございます、まさにtodowebはjsでした! ちなみにnodejsにおいてこのリバースプロキシは絶対必須でしょうか。 単なる興味なのですが、8080ポートに直接アクセスされる設計は 無理ではないという認識でよいのでしょうか。 リバースプロキシについては以下などで用途は把握しました。 https://www.atmarkit.co.jp/ait/articles/1608/25/news034.html
退会済みユーザー

退会済みユーザー

2019/03/01 12:13

もしかしたら、thaimさんのご回答にある > nginxプロキシを導入すると既存のアプリは修正なしに > インタフェースを統一し利便性を向上することができます。 がnginxを手前に置いている理由な気がしてきました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問