Kubernetes の 3 つの外部アクセス方法: NodePort、LoadBalancer、Ingress

Kubernetes の 3 つの外部アクセス方法: NodePort、LoadBalancer、Ingress

最近、何人かの学生から NodePort、LoadBalancer、Ingress の違いについて質問を受けました。どちらも外部クラスター トラフィックをクラスターにインポートする方法ですが、実装方法は異なります。それぞれの仕組みと、どのように選択できるかを見てみましょう。

注: ここで説明する内容はすべて Google Kubernetes Engine に基づいています。 minikube やその他のツールを使用してオンプレミス モードで他のクラウド上で実行する場合、対応する操作が少し異なる場合があります。あまり技術的な詳細には立ち入りませんが、もっと詳しく知りたい場合は、公式ドキュメント[1]が素晴らしいリソースになります。

[[225771]]

クラスターIP

ClusterIP サービスは Kubernetes のデフォルト サービスです。クラスター内でサービスが提供され、クラスター内の他のアプリケーションがそのサービスにアクセスできるようになります。クラスターの外部からはアクセスできません。

ClusterIP サービスの YAML ファイルは次のようになります。

  1. APIバージョン: v1
  2. 種類: サービス
  3. メタデータ:
  4. 名前: my-internal-service
  5. セレクタ:
  6. アプリ: 私のアプリ
  7. 仕様:
  8. タイプ: ClusterIP
  9. ポート:
  10. -名前: http
  11. ポート: 80
  12. ターゲットポート: 80
  13. プロトコル: TCP

ClusterIP サービスがインターネットからアクセスできない場合、なぜそれについて議論するのでしょうか?それは、Kubernetes プロキシ モードを通じてサービスにアクセスできるからです。

Kubernetes プロキシ モードを開始します。

  1. $ kubectl プロキシ--port=8080  

次のパターンを使用して、Kubernetes API を介してこのサービスにアクセスできます。

  1. http://localhost:8080/api/v1/proxy/namespaces/<NAMESPACE>/services/<SERVICE- NAME >:<PORT- NAME >/

上記で定義したサービスにアクセスするには、次のアドレスを使用できます。

  1. http://localhost:8080/api/v1/proxy/namespaces/デフォルト/services/my-internal-service:http/

このアプローチはいつ使用すればよいですか?

シナリオによっては、Kubernetes プロキシ モードを使用してサービスにアクセスする必要があります。

  • 何らかの理由で、サービスをデバッグしたり、ラップトップから直接サービスにアクセスしたりする必要があります。
  • 社内通信、社内ダッシュボードの表示などを可能にします。

このアプローチでは、認証されていないユーザーとして kubectl を実行する必要があるため、この方法でサービスをインターネットに公開したり、本番環境で使用したりすることはできません。

ノードポート

NodePort サービスは、外部トラフィックをサービスに誘導する最も原始的な方法です。 NodePort は、その名前が示すように、すべてのノード (仮想マシン) で特定のポートを開き、このポートに送信されたトラフィックは対応するサービスに転送されます。

NodePort サービスの YAML ファイルは次のようになります。

  1. APIバージョン: v1
  2. 種類: サービス
  3. メタデータ:
  4. 名前: my-nodeport-service
  5. セレクタ:
  6. アプリ: 私のアプリ
  7. 仕様:
  8. タイプ: NodePort
  9. ポート:
  10. -名前: http
  11. ポート: 80
  12. ターゲットポート: 80
  13. ノードポート: 30036
  14. プロトコル: TCP

NodePort サービスは、通常の「ClusterIP」サービスとは主に 2 つの点で異なります。 ***、そのタイプは「NodePort」です。ノード上で開いているポート値を指定する、nodePort と呼ばれる追加のポートがあります。このポートを指定しない場合は、システムがランダムにポートを選択します。 thockin がコメントで述べたように、ユーザーが利用可能なポートを自分で選択するのはコストがかかりすぎるため、ほとんどの場合、Kubernetes にポートを選択させる必要があります。

このアプローチはいつ使用すればよいですか?

  1. このアプローチにはいくつかの欠点があります。
  2. 各ポートは1つのサービスのみに対応します
  3. ポート範囲は30000~32767のみです

ノード/VMのIPアドレスが変更された場合、この状況に対処できる必要があります。

上記の理由から、本番環境でこの方法でサービスを公開することはお勧めしません。実行しているサービスが常時可用性を必要としない場合、またはコストが重視される場合は、このアプローチを使用できます。このようなアプリの最も良い例は、デモ アプリや一時的なアプリです。

ロードバランサー

LoadBalancer サービスは、サービスをインターネットに公開するための標準的な方法です。 GKEでは、このアプローチによりネットワークロードバランサ[2]が起動され、単一のIPアドレスが割り当てられ、すべてのトラフィックがサービスに転送されます。

このアプローチはいつ使用すればよいですか?

サービスを直接公開する場合、これがデフォルトになります。指定したポートへのすべてのトラフィックは、対応するサービスに転送されます。フィルターやルーティングなどはありません。つまり、HTTP、TCP、UDP、Websockets、gRPC など、ほぼあらゆる種類のトラフィックをサービスに送信できます。

このアプローチの最大の欠点は、LoadBalancer で公開される各サービスに独自の IP アドレスが割り当てられ、使用される LoadBalancer ごとに料金が発生するため、非常にコストがかかることです。

イングレス

上記のすべての例とは異なり、Ingress は実際にはサービスの種類ではありません。代わりに、複数のサービスの前に配置され、「スマート ルーター」またはクラスター エントリ ポイントとして機能します。

Ingress ではさまざまなことを実行でき、Ingress コントローラーの種類によって機能が異なります。

GKEのデフォルトのイングレスコントローラはHTTP(S)ロードバランサ[3]を起動します。パスまたはサブドメインに基づいてトラフィックをバックエンド サービスにルーティングできます。たとえば、ドメイン foo.yourdomain.com 宛てのすべてのトラフィックを foo サービスに転送し、パス yourdomain.com/bar/path のトラフィックを bar サービスに転送できます。

L7 HTTPロードバランサ[4]を使用してGKE上で生成されるIngressオブジェクトのYAMLファイルは、次のようになります。

  1. apiバージョン: extensions/v1beta1
  2. 種類: イングレス
  3. メタデータ:
  4. 名前: my-ingress
  5. 仕様:
  6. バックエンド:
  7. サービス名: その他
  8. サービスポート: 8080
  9. ルール:
  10. - ホスト: foo.mydomain.com
  11. http:
  12. パス:
  13. - バックエンド:
  14. サービス名: foo
  15. サービスポート: 8080
  16. - ホスト: mydomain.com
  17. http:
  18. パス:
  19. - パス: /bar/*
  20. バックエンド:
  21. サービス名: バー
  22. サービスポート: 8080

このアプローチはいつ使用すればよいですか?

Ingress はおそらくサービスを公開する最も大規模な方法ですが、最も複雑でもあります。 Ingress コントローラには、Google Cloud Load Balancer、Nginx、Contour、Istio など、さまざまな種類があります。また、cert-manager[5]などのさまざまなプラグインがあり、サービスにSSL証明書を自動的に提供できます。

Ingress は、同じ IP アドレスを使用して複数のサービスを公開し、それらすべてが同じレイヤー 7 プロトコル (通常は HTTP) を使用する場合に最も便利です。ネイティブ GCP 統合を使用する場合、支払うのは 1 つのロードバランサに対してのみで、Ingress は「スマート」であるため、すぐに使用できるさまざまな機能 (SSL、認証、ルーティングなど) も利用できます。

関連リンク:

https://kubernetes.io/docs/concepts/services-networking/service/

https://cloud.google.com/compute/docs/load-balancing/network/

https://cloud.google.com/compute/docs/load-balancing/http/

https://cloud.google.com/compute/docs/load-balancing/http/

https://github.com/jetstack/cert-manager

<<:  ハイブリッドクラウドセキュリティから学んだ教訓

>>:  誰もがクラウド コンピューティングとビッグ データについて語っていますが、クラウド コンピューティングとは一体何でしょうか?

推薦する

クラウドベースの SaaS アプリケーションで AI を活用して効率的なリモート ワークを実現する方法

現在進行中のCOVID-19パンデミックにより、企業がリモートワークを実施する必要性が浮き彫りになり...

5億人のトラフィックプールを掌握するために、ミニプログラム電子商取引後半の鍵は何ですか?

ミニプログラムがツールからプラットフォームへと変化したことは、コンテンツ電子商取引がユーザーとトラフ...

#ニュース#cmivps 香港 VPS が CN2 CIA ネットワークにアクセス (アウトバウンド バックボーンへの直接接続、リターンは CN2 GIA)

cmivpsは、香港のVPSを全面的にアップグレードし、CN2 CIAネットワーク(アウトバウンドル...

1億元のボーナスプランはKugouのソーシャルマーケティングの新たな方法を切り開く

2018年最もホットなプロジェクト:テレマーケティングロボットがあなたの参加を待っています多くの有名...

SEO を活用して企業のウェブサイトを最適化する方法

始める前に、皆さんに質問したいと思います。エンタープライズ ウェブサイトとは何ですか? エンタープラ...

国内ウィットキーサイトの運営危機と運営戦略について

現在までに、国内のWitkeyウェブサイト上のWitkey会員数は4,000万人を超えています。新し...

2014年のBaidu最適化から得た洞察

2014 年は国内の SEO 担当者にとって大きな影響力のある年でした。 SEO業界に早く参入した人...

iPhone 6がサファイアスクリーンを採用しない理由

iPhone 6とiPhone 6 Plusが発売される前、Appleが新世代のスマートフォンにサフ...

React 360 でバーチャルリアリティ (VR) 体験を作成する

[[404840]] React でバーチャルリアリティ (VR) を体験してみませんか?これは本当...

外部リンクスキル:「質の高いフォーラム」の実践

外部リンクの重要性は自明であり、最適化の実践者にとっては日常的に必須のものです。外部リンクを作成する...

分散型 x86 サーバー環境の課題

限られた予算とリソースで今日のIT環境を運用する今日の競争の激しい市場において、顧客は IT 部門を...

com/net で 7 ドルで登録、更新は 9.9 ドル

HostCat からのドメイン名割引情報を投稿してから長い時間が経ちました。ここでは、いくつかの c...

Xenspec: ロサンゼルス データ センターを追加、月額 2.95 ドル、トラフィック無制限、sharktech ライン、簡単なレビュー

これまでHostcatでxenspecを2回紹介してきました。最初はシカゴデータセンターのトラフィッ...

WeChatインターネットプロモーション体験7+1

以下の内容は、あなた(読者)のために丁寧に書かれた実践的な経験です。役に立つ助けと予期せぬインスピレ...

中国と米国間の最速のネットワーク回線である、信頼できるcn2 gia vpsマーチャントをいくつか推奨します

ウェブマスターは、cn2 gia ネットワークを提供する複数の VPS 販売業者を慎重に選択して推奨...