k8sのPodIP、ClusterIP、ExternalIP



Podip Clusterip Externalip K8s



https://www.cnblogs.com/embedded-linux/p/12657128.html

IPの下で

Kubernetesのデプロイの最小単位はポッドです。異なるホスト間のコンテナインターワーキングテクノロジーとしてFlannelを使用する場合、Flannelなどはノード間のルーティングテーブルを維持します。 Flannelの設計の目的は、クラスター内のすべてのノードでIPアドレスを使用するためのルールを再計画することです。これにより、異なるノード上のコンテナーが「同じイントラネット」と「重複しない」IPアドレスを取得し、ノードに許可することができます。異なるノード上でコンテナはイントラネットIPを介して直接通信できます。



各ポッドが起動すると、イメージgcr.io/google_containers/pause:0.8.0のコンテナが自動的に作成され、コンテナと外部の間の通信はこのコンテナプロキシを通過し、コンテナIPを呼び出すこともできます。ポッドIP。

サービスClusterIP

サービスはKubernetesのコアコンセプトです。サービスを作成することにより、同じ機能を持つコンテナーのグループに統一されたエントリーアドレスを提供し、要求をバックエンドコンテナーアプリケーションに配布できます。



ポッドIPアドレスは実際にはネットワークカード(仮想デバイスの場合もあります)に存在しますが、サービスクラスターIPを担当するネットワークデバイスはありません。

Iptablesルールを使用してkube-proxyによってローカルポートにリダイレクトされ、バックエンドポッドにバランスされます。このアドレスは、–service-cluster-ip-range = 10.0.0.0/16などのスタートアップAPIのservice-cluster-ip-rangeパラメーター(古いバージョンはportal_netパラメーター)で指定されたアドレスプールから割り当てられます。このサービスのポートが1234であると想定します。クラスター内のすべてのkube-proxyがこのサービスに気付きます。プロキシが新しいサービスを検出すると、ローカルノードで任意のポートを開き、対応するiptablesルールを確立し、サービスのIPとポートをこの新しく作成されたポートにリダイレクトし、このサービスへの接続の受け入れを開始します。

クライアントがサービスにアクセスすると、これらのiptableルールが有効になります。クライアントのトラフィックは、サービス用にkube-proxyによって開かれたポートにリダイレクトされ、kube-proxyは顧客にサービスを提供するバックエンドポッドをランダムに選択します。このプロセスを以下に示します。



Kubernetesネットワークモデルによると、サービスクラスターのIPとポートを使用してサービスにアクセスするクライアントは、任意のエージェントノードに配置でき、クラスター内でのみアクセスできます。サービスに外部からアクセスするには、サービスに外部アクセスIPを付与する必要があります。

外部IP

外部からサービスにアクセスするには、次の2つの方法があります。

1)nodePortを設定して物理マシンにマップすると同時に、サービスのタイプをNodePortに設定します。

2)LoadBalancerを設定して、クラウドサービスで提供されるLoadBalancerアドレスをマッピングします。この使用法は、パブリッククラウドサービスプロバイダーのクラウドプラットフォームがサービスを設定するシナリオでのみ使用されます。このサービスのリクエストは、LoadBalancerを介してバックエンドポッドに転送されます。負荷分散の実装は、クラウドサービスプロバイダーが提供するLoadBalancerの実装メカニズムによって異なります。

例:

nginxに基づいてデプロイを作成する

kubectl run nginx --image = nginx:maxline

ExternalIPは、外部サービスサービス(クラスターIPおよび外部IPを含む)を提供します

kubectl Exposure Deployment nginx --type = LoadBalancer --port = 80 --target-port = 80

タイプタイプはLoadBalancer、-portはポート80を指定します。これは、サービスによって外部に公開されるサービスポートが80、-target-port = 80であることを意味します。このポートは、ポッド内のnginxdockerコンテナーによって提供されます。ポート、デフォルトは80です。

kubectl get svcは外部IPとポートを取得し、External:portを介して外部からサービスにアクセスします。

NodePortは外部サービスサービスを提供します

kubectl Exposure Deployment nginx --type = NodePort --port = 80 --target-port = 80

kubectl get svcを使用してnodePortポートを取得し、任意のノードの外部IPアドレス+ nodePortポートを使用してサービスに外部からアクセスします。

添付:ポッドポートフォワーディング機能

テストの目的で、ポッドが正常にサービスを提供できるかどうかを確認する簡単な方法が必要になる場合があります。 kubectlで毎回サービスを作成するのは面倒です。

簡単な方法は次のとおりです。ポッドのポート転送機能(ポート転送)。

たとえば、次の図のgetpodsによって返されるnginx-6f754dd4b9-74jdnという名前の最初のポッドの機能をテストします。

コマンドラインを実行しますkubectlport-forward pod / nginx-6f754dd4b9-74jdn 8080:80

プロンプトメッセージ「127.0.0.1:8080から転送-> 80」を参照してください。これは、現在のホストのポート8080がnginxポッドの80作業ポートにマップされていることを意味します。

最後に、localhost:8080を介してnginxpodが提供するサービスに直接アクセスできます。

参照:

1.1。 KubernetesのPodIP、ClusterIP、外部IP

二。 Kubernetesの3つのIPアドレスタイプを理解するための簡単な例