Kubernetes クラスター ネットワーク: k8s がサービスを外部に公開する方法

Kubernetes クラスター ネットワーク: k8s がサービスを外部に公開する方法

1. マスタークラスタネットワーク

マスター クラスターのネットワークは、一般的な負荷分散クラスターのネットワークと同じように、比較的単純です。複数ノードの apiserver の IP とポート (6443) は、負荷分散の IP とポートを使用します。この負荷分散 IP とポートは、マスター/ノード ノードが参加するときに使用され、マスター ノードのクラスター ネットワークが形成されます。

  • マスターノード間のネットワーク: 複数のマスターノードがある場合は、データの一貫性を維持するために、分散キー値ストアである etcd を使用する必要があります。 etcd は通常、高可用性とフォールト トレランスを実現するために Raft プロトコルを使用します。各ノードが相互に通信できる必要があるため、信頼性の高いネットワーク接続を構成する必要があります。
  • マスター ノードとノード ノード間のネットワーク: マスター ノードとノード ノードは、kube-apiserver コンポーネントを介して通信する必要があります。 kube-apiserver はマスターノード上で実行されるコンポーネントです。外部クライアントと内部コンポーネントが k8s クラスターのリソースとステータスにアクセスするための RESTful API インターフェイスを提供します。ノードは kubelet と kube-proxy という 2 つのコンポーネントを実行します。これらのコンポーネントは、ノードと Pod の情報を kube-apiserver に定期的に報告するか、kube-apiserver から指示を受信する必要があります。したがって、安全で安定したネットワーク接続を構成する必要があります。
  • マスター ノードと外部クライアント間のネットワーク: 外部クライアントは、kubectl コマンドライン ツールまたはその他の方法を介してマスター ノード上の kube-apiserver にアクセスし、k8s クラスターを管理および操作できます。セキュリティとアクセシビリティを確保するには、適切なネットワーク アドレスとポートを設定し、TLS/SSL を使用して通信を暗号化する必要があります。

2. ノードクラスタネットワーク

K8s クラスターがサービスを外部に公開する方法は主に次のとおりです。

  • NodePort: クラスター内の各ノードの固定ポートにサービスを公開します。クライアントは、ノードの IP アドレスとポートを通じてサービスにアクセスできます。
  • LoadBalancer: クラウド プラットフォームのロード バランサを使用して、サービスをパブリック ネットワークに公開します。クライアントはパブリック IP アドレスとポートを通じてサービスにアクセスできます。
  • Ingress: Ingress コントローラーを使用して、サービスをパブリック ネットワークに公開し、統合されたドメイン名アクセスを提供します。

1. ノードポート

NodePort は、Kubernetes が提供する最もシンプルなサービス公開方法です。サービス タイプが NodePort の場合、Kubernetes はサービスに固定ポートを割り当て、クラスター内の各ノードの同じポートにマップします。クライアントは、クラスター内の任意のノードの IP アドレスとポートを通じてサービスにアクセスできます。

NodePort の設定は非常に簡単です。サービス仕様でタイプを NodePort に設定し、ポート番号を指定するだけです。たとえば、次の YAML は NodePort サービスを定義します。

 apiVersion: v1 kind: Service metadata: name: nginx spec: type: NodePort ports: - port: 80 targetPort: 80 nodePort: 30000

サービスは、クラスター内のすべてのノードのポート 30000 で公開されます。クライアントは、クラスター内の任意のノードの IP アドレスとポート 30000 を介してサービスにアクセスできます。

NodePort の利点は、シンプルで使いやすく、クラスター外部にサービスを迅速に公開できることです。ただし、NodePort にはいくつかの欠点もあります。
Kubernetes NodePort サービスは各ノード上のポートを公開し、クラスター IP アドレスを割り当てます。外部クライアントは <NodeIP>:<NodePort> を介してサービスにアクセスできます。 NodePort タイプのサービスは、Web サービスなど、クラスターの外部からアクセスする必要があるサービスに適しています。

NodePort タイプのサービスには、次のような利点があります。

  • 設定は簡単で、type: NodePort を指定するだけです。
  • 展開は高速で、追加のコンポーネントは必要ありません。
  • HTTP、TCP、UDP など、あらゆるタイプのサービスに使用できます。

NodePort タイプのサービスには、次のような欠点もあります。

  • ポート範囲は制限されており、30000~32767 の間のポートのみ使用できます。
  • 各ポートは 1 つのサービスのみ提供でき、同時に複数のサービスを提供することはできません。
  • 外部トラフィックがクラスターに入ることを許可するには、ファイアウォールを手動で開く必要があります。

2. ロードバランサー

LoadBalancer は、Kubernetes が提供する、より高度なサービス公開方法です。サービス タイプが LoadBalancer の場合、Kubernetes はクラウド プラットフォーム上にロード バランサーを作成し (通常は対応するロード バランシング製品の購入費用がかかります)、ロード バランサーをサービスにバインドします。クライアントは、ロード バランサーのパブリック IP アドレスとポートを介してサービスにアクセスできます。

LoadBalancer サービスには次の利点があります。

  • 高可用性により、サービスが常に利用可能であることを保証できます。
  • 複数のサービスに負荷分散を提供し、サービスのパフォーマンスを向上させることができます。
  • 任意のポートを使用してサービスを公開できます。
  • サービスは SSL/TLS で保護できます。

LoadBalancer タイプのサービスには、次のような欠点もあります。

  • 構成は複雑であり、ロード バランサーのタイプと構成を指定する必要があります。
  • 展開には追加の時間とリソースが必要です。
  • ロードバランサーの種類によっては追加料金が発生する場合があります。

3. イングレス

Ingress は、Kubernetes によって提供される、より柔軟なサービス公開方法です。 Ingress コントローラーは、複数のサービスを 1 つのドメイン名に統合し、ルーティング ルールを提供して、クライアントが統合されたドメイン名を通じてさまざまなサービスにアクセスできるようにします。

選択する具体的な方法は、実際のニーズに基づいて決定する必要があります。サービスを迅速に展開する必要がある場合は、NodePort が適しています。サービスをパブリック ネットワークに公開する必要がある場合は、LoadBalancer または Ingress の方が適しています。

次のような利点があります。

  • 柔軟性とパワー: Ingress は、リクエスト パス、ホスト名、HTTP メソッドなどに基づいて、トラフィックをさまざまなサービスにルーティングできます。また、Ingress は、負荷分散、SSL/TLS 保護、キャッシュなどの機能も提供できます。
  • 使いやすさ: ngress は簡単に構成でき、YAML ファイルを使用して Ingress ルールを定義できます。
  • スケーラビリティ: Ingress は複数の Ingress コントローラを使用して、負荷分散と高可用性を実現できます。

Ingress の欠点:

  • パフォーマンスのオーバーヘッド: Ingress コントローラーはクラスター内で実行する必要があり、特定のリソースを消費します。
  • 複雑さ: Ingress 構成は複雑になる可能性があり、ある程度の学習コストが必要になります。

3. 関連する問題

1. すでにサービスがある場合、なぜ Ingress が必要なのでしょうか?

Kubernetes Service と Ingress はどちらも、Kubernetes サービスを外部に公開するために使用されるリソース オブジェクトです。それらの主な違いは次のとおりです。

  • サービスは Kubernetes の中核概念であり、一連の Pod を論理ユニットに抽象化し、統合されたアクセス ポータルを提供するために使用されます。サービスには、ClusterIP、NodePort、LoadBalancer、ExternalName の 4 つのタイプがあります。このうち、ClusterIP タイプのサービスはクラスター内でのみ使用可能、NodePort タイプのサービスはクラスターの内外両方で使用可能、LoadBalancer タイプのサービスはクラスターの外で使用可能、ExternalName タイプのサービスは外部のホスト名またはドメイン名を指します。
  • Ingress は Kubernetes の拡張リソース オブジェクトであり、Service に対してより柔軟で強力なルーティング機能を提供するために使用されます。 Ingress は、リクエスト パス、ホスト名、HTTP メソッドなどに基づいて、トラフィックをさまざまなサービスにルーティングできます。また、Ingress は、負荷分散、SSL/TLS 保護、キャッシュなどの機能も提供できます。

したがって、Service と Ingress を併用することで、より柔軟で強力なサービス ルーティング機能を実現できます。たとえば、Service を使用して一連の Pod を論理ユニットに抽象化し、Ingress を使用して Service にルーティング機能と負荷分散機能を提供できます。

2. Ingress の代わりに nginx を使用できますか?

Ingress と外部 Nginx の主な違いは次のとおりです。

  • デプロイ場所: Ingress は Kubernetes のリソース オブジェクトであり、Kubernetes クラスターにデプロイする必要があります。外部 Nginx は、Kubernetes クラスターの外部または Kubernetes クラスター内にデプロイできます。
  • 管理方法: Ingress は Kubernetes コントローラーによって管理され、Kubernetes API を使用して Ingress を管理できます。外部 Nginx は、外部ツールまたはコマンドを通じて管理する必要があります。
  • 機能: Ingress は、負荷分散、SSL/TLS 保護、キャッシュなどのより豊富な機能を提供します。外部 Nginx はプラグインで拡張できますが、Ingress ほど機能が豊富ではない場合があります。

Ingress は Kubernetes のより完全なソリューションであり、より豊富な機能とより柔軟な構成を提供します。 Kubernetes クラスターのすべての機能を使用する必要がある場合は、Ingress を使用する方が適しています。

Ingress の代わりに外部 Nginx を使用するシナリオをいくつか示します。

  • すでに Nginx サーバーが存在しており、Ingress をデプロイしたくない。
  • 特定のプラグインや構成など、外部 Nginx の特定の機能を使用する必要があります。
  • Kubernetes サービスを外部ネットワークに公開する必要がありますが、Ingress のすべての機能を使用する必要はありません。

3. NodePort と Ingress

  • NodePort は、すべてのノードでポートを開き、トラフィックをサービスに転送する、シンプルで使いやすい外部アクセス方法です。追加の IP アドレスやロード バランサーを必要としないのが利点ですが、ポート範囲が限られている (30000 ~ 32767)、安全でない (攻撃されやすい)、レイヤー 7 プロトコルをサポートしていない (ドメイン名やパスに基づいてルーティングできない)、ノードの数によってパフォーマンスが制限されるなどの欠点があります。
  • Ingress は、複数のサービスの前にあるパスまたはドメイン名に基づいてトラフィックをサービスにルーティングする、強力で柔軟な外部アクセス方法です。その利点は、複数のサービスを公開できること、HTTP/HTTPS プロトコルをサポートしていること、高パフォーマンスと高可用性を実現できること、さまざまなプラグインと機能 (SSL/TLS 終了、認証、書き換え、電流制限など) を統合できることです。しかし、その欠点は、複雑で理解しにくいことであり、追加のコントローラーとプラグイン、およびクラウド環境または物理デバイスによって提供されるロードバランサーが必要になります。

アプリケーションを展開する手順

k8s ノード クラスター ノードにデプロイされた Java アプリケーションに外部アクセス サービスを提供するには、k8s Service と Ingress の 2 つのリソース オブジェクトを使用する必要があります。サービスは、Pod のグループに対する論理アクセス方法を定義する抽象化であり、Pod 間および Pod と外部ネットワーク間の負荷分散とサービス検出を実現できます。 Ingress は、クラスター内のサービスに外部リクエストをルーティングする方法を定義する一連のルールです。ドメイン名、パス、SSL/TLS などの高度な機能を実装できます。これは次の手順で実現できます。

  • まず、ノード上に Deployment オブジェクトを作成し、Java アプリケーションの Pod の数、仕様、イメージなどの情報を定義し、各 Pod に IP アドレスを割り当てる必要があります。
  • 次に、ノード上にサービス オブジェクトを作成し、ポート、プロトコル、セレクターなどの情報など、Java アプリケーションのアクセス方法を定義し、サービスに仮想 IP アドレスを割り当てる必要があります。
  • 次に、ノード上に Ingress オブジェクトを作成し、ドメイン名、パス、証明書などの Java アプリケーションの外部アクセス ルールを定義し、Ingress にパブリック IP アドレスまたはドメイン名を割り当てる必要があります。
  • 最後に、Ingress オブジェクトのルールに従って外部リクエストを対応するサービスに転送するために、nginx-ingress、traefik などの Ingress Controller コンポーネントをノードにインストールする必要があります。

<<:  配信とネットワークの原則について話しましょう

>>:  単一のクラウドプロバイダーに過度に依存することの危険性

推薦する

新しい東洋のライブ交通パスワード

「イースタンセレクション」のファン数がゼロから100万人に増えるまでに6カ月かかり、100万人から2...

テクノロジーがトレンドを決定します。360 度の包括的な検索は単なるクラウドです。

約2か月前に百度のアルゴリズムが大混乱に陥った後、360は8月16日に総合検索サービスを開始しました...

否定的な情報は「2つのノーと3つの治療」の原則に従うべきである

否定的な情報は「2つのノーと3つの治療」の原則に従うべきであるネガティブな情報は企業やウェブサイトに...

中国新エネルギー充電杭産業レポート

充電スタンドは、電気自動車の運行を維持するためのエネルギー供給設備です。通常、公共の建物、ショッピン...

電子商取引企業がコンテンツマーケティングを実施するためのいくつかの新しい方法について簡単に説明します。

ハードなプロモーションと比較すると、コンテンツマーケティングは人々に受け入れられやすく、ユーザーに認...

Webmaster.com のおかげで、3 日間で Baidu スナップショットを正常に復元できました。

6月22日と6月28日のBaiduの洗礼を受けた後、残念ながら私のウェブサイトはランキングと外部リン...

Kubernetesは問題を解決するため複雑である

Kubernetes は複雑すぎますか? Kubernetes は複雑かどうかとよく聞かれます。この...

Baidu の顔を変える SEO に不安を感じないで

SEOVIPのウェブサイトがリニューアルされ、レイアウトスタイルが変わった後の微妙な変化について書き...

メタバースがバーチャルアイドルを生み出す?

3月には、メタバースをコンセプトにした最初の銘柄であるRobloxがニューヨーク証券取引所に正式に上...

人民日報がマイクロソフトと提携し、マイクロソフト XiaoIce と Bing 検索を搭載した英語クライアント バージョン 2.0 をリリース

人民日報は6月11日、国家モバイルニューメディア集約プラットフォーム「人民アカウント」の正式ローンチ...

Zhihu は Baidu Knows に「勝った」のか?

質問がある場合、「 Baidu Knows」または「 Zhihu 」を使用して検索しますか?本記事で...

justhost シンガポール VPS はいかがでしょうか?月額36元で200Mの帯域幅で無制限のトラフィックを提供するシンガポールVPSの簡単なレビュー

Justhost は今週、シンガポール VPS 事業を開始しました。ご存知のとおり、シンガポールは地...

Burst-29.95ドルのサーバー/4gのメモリ/500gのハードディスク/5Tのトラフィック/無料のDAパネル/4つのデータセンター

Burst は Green Monday に非常にコスト効率の高い独立サーバーを導入しました。これま...

hostvenom: すべてのサーバーが 20% オフ、月額 40 ドルから、e3-1230v2/32g メモリ/500gSSD/50T 帯域幅、シカゴ Steadfast データ センター

アメリカのサーバープロバイダーであるHostvenomは、今月で創業10周年を迎えました。主に米国シ...

ファーウェイ、新世代のエンタープライズレベル分散データウェアハウス「FusionInsight LibrA」をリリース

数兆のデータ相関分析に対する第2レベルの応答を実現するために、新しいPBレベルのエンタープライズデー...