ClusterIP:サービスは、クラスター内のポッド/サービスから到達可能です。クラスター
IPのタイプのデフォルト名前空間でmyserviceというサービスを作成すると、次のサービスの予測可能な静的DNSアドレスが作成されます。
myservice.default.svc.cluster.local(またはmyservice.defaultのみ、またはデフォルトの名前空間のポッドによって「myservice」のみが機能します)
そして、そのDNS名は、クラスター内のポッドとサービスによってのみ解決できます。
NodePort:K8sホストノード(およびクラスター内のポッド/サービス)にpingを送信できる同じLAN /クライアント上のクライアントはサービスに到達できます(セキュリティ上の理由から、k8sホストノードはプライベートサブネット上にある必要があるため、インターネット上のクライアントが勝ちますこのサービスに到達できない)
タイプのmynamespace名前空間でmynodeportserviceというサービスを作成した場合:3ノードKubernetesクラスター上のNodePort。次に、タイプがClusterIPのサービスが作成され、次の予測可能な静的DNSアドレスでクラスター内のクライアントから到達可能になります。
mynodeportservice.mynamespace.svc.cluster.local(または単にmynodeportservice.mynamespace)
mynodeportserviceが30000-32767の範囲のノードポートでリッスンする各ポートについて、ランダムに選択されます。そのため、クラスターの外部にある外部クライアントは、クラスターの内部に存在するClusterIPサービスにアクセスできます。3つのK8ホストノードにIP 10.10.10.1、10.10.10.2、10.10.10.3があり、Kubernetesサービスがポート80でリッスンしていて、ランダムに選択されたノードポートが31852
だったとします。クラスターの外部に存在するクライアントは、 10.10.10.1:31852、10.10.10.2:31852、または10.10.10.3:31852(すべてのKubernetesホストノードがNodePortをリッスンしているため)Kubeproxyはリクエストをmynodeportserviceのポート80に転送します。
LoadBalancer:インターネットに接続しているすべての人がサービスにアクセスできます*(一般的なアーキテクチャは、L4 LBはDMZに配置するか、プライベートIPとパブリックIPの両方を提供することでインターネット上でパブリックにアクセスでき、k8sホストノードはプライベートサブネット上にあります)
(注:これは、ベアメタルKubernetesのように、Kubernetes実装の100%で機能しない唯一のサービスタイプであり、Kubernetesにクラウドプロバイダーの統合がある場合に機能します。
mylbserviceを作成すると、L4 LB VMが生成されます(クラスターIPサービス、およびNodePort Serviceも暗黙的に生成されます)。今回のNodePortは30222です。L4LBには1.2.3.4のパブリックIPがあり、トラフィックをロードバランスして、プライベートIPアドレスを持つ3つのK8sホストノードにトラフィックを転送するという考えです。(10.10.10.1:30222、10.10.10.2:30222、10.10.10.3:30222)その後、Kube Proxyはそれをクラスタ内に存在するタイプClusterIPのサービスに転送します。
あなたも尋ねました:NodePortサービスタイプはClusterIPをまだ使用していますか?はい*
または、kubectl get nodesを実行したときにNodeIPが実際に見つかったIPですか?また、はい*
基礎の間で平行線を描きましょう:
コンテナーはポッド内にあります。ポッドはレプリカセット内にあります。レプリカセットはデプロイメント内にあります。
同様
に、ClusterIP ServiceはNodePort Serviceの一部です。NodePortサービスは、ロードバランサーサービスの一部です。
この図では、クライアントはクラスター内のポッドになります。
externalIPs
ここで方程式がどのように変化するかについてコメントしていただけますか?具体的には、externalIPs
配列をClusterIP
-typeサービスに割り当てることが可能で、そのサービスは外部IPでもアクセス可能になりますか?NodePortよりもこれをいつ選択しますか?