1. ホーム
  2. kubernetes

[解決済み] KubernetesのClusterIP、NodePort、LoadBalancerのサービスタイプの違いとは?

2022-03-24 15:43:23

質問

質問1 - ドキュメントを読んでいて、表現に少し戸惑うことがあります。こう書いてあります。

クラスターIP : クラスタ内部のIPでサービスを公開します。この値を選択すると、サービスはクラスタ内からのみ到達可能になります。これはデフォルトのServiceType

ノードポート : 各NodeのIP上のサービスを静的なポート(NodePort)で公開します。NodePortサービスがルーティングされるClusterIPサービスが自動的に作成されます。クラスタの外から NodePort サービスに連絡するには、次のようにリクエストします。 <NodeIP>:<NodePort> .

ロードバランサー : クラウド事業者のロードバランサーを利用してサービスを外部に公開する。外部ロードバランサーのルーティング先となるNodePortとClusterIPサービスが自動的に作成される。

NodePort サービスタイプでは、やはり ClusterIP が、異なるポートで、外部クライアントに開放されているだけなのでしょうか?つまり、この場合 <NodeIP>:<NodePort> と同じです。 <ClusterIP>:<NodePort> ?

それとも NodeIP を実行したときに見つかったIPを、実際に kubectl get nodes であり、ClusterIPサービスタイプに使用される仮想IPではないのですか?

質問2 - 下記リンクの図にもあります。

を使用する特別な理由があるのでしょうか? Client の中に入っています。 Node ? の中でないといけないと思い込んでいました。 Cluster の場合、ClusterIPサービスタイプ?

同じダイアグラムをNodePort用に描いた場合、クライアントを完全に NodeCluster それとも、私が完全にポイントを外しているのでしょうか?

どのように解決するのですか?

ClusterIPは、以下を公開します。

  • spec.clusterIp:spec.ports[*].port

このサービスにアクセスできるのは、クラスタの内部にいるときだけです。このサービスにアクセスするには spec.clusterIp ポートに接続します。もし spec.ports[*].targetPort が設定されている場合、そのポートからtargetPortにルーティングされます。を呼び出したときに得られるCLUSTER-IPは、そのポートからターゲットポートにルーティングされます。 kubectl get services は、クラスタ内部でこのサービスに割り当てられているIPです。

NodePortは以下を公開する。

  • <NodeIP>:spec.ports[*].nodePort
  • spec.clusterIp:spec.ports[*].port

ノードの外部IPからnodePortでこのサービスにアクセスした場合、そのリクエストを spec.clusterIp:spec.ports[*].port にルーティングし、そのルーティング先が spec.ports[*].targetPort が設定されている場合。このサービスもClusterIPと同様にアクセスすることができます。

NodeIPは、ノードの外部IPアドレスです。からサービスにアクセスすることはできません。 spec.clusterIp:spec.ports[*].nodePort .

LoadBalancerは以下を公開する。

  • spec.loadBalancerIp:spec.ports[*].port
  • <NodeIP>:spec.ports[*].nodePort
  • spec.clusterIp:spec.ports[*].port

ロードバランサーのIPアドレスからこのサービスにアクセスすることができます。ロードバランサーはリクエストをnodePortにルーティングし、nodePortはリクエストをclusterIPポートにルーティングします。NodePortやClusterIPサービスと同様に、このサービスにアクセスすることができます。