K 8 s混点分析:nodePort、port、taget Port

2253 ワード

1.nodePort
外部流量アクセスk 8 sクラスタ内のservice入口の1つの方法(別の方法はLoadBalancer)、すなわちnodeIP:nodePortは外部流量アクセスk 8 sクラスタ内のserviceへの入り口である.
例えば、外部ユーザがk 8 sクラスタの一つのWebアプリケーションにアクセスするなら、serviceに対応するtype=NodePortnodePort=30001を構成することができる.他のユーザは、ブラウザhttp://node:30001を介してウェブサービスにアクセスすることができる.
データベースなどのサービスは外部からアクセスする必要がないかもしれません.内部サービスにアクセスすればいいです.サービスのNodePortを設定する必要はありません.
2.ポート
k 8 sクラスタ内部サービス間でserviceの入口にアクセスする.すなわちclusterIP:portは、サービスがcluster IPに露出されるポートである.
mysql容器は3306ポートを暴露しました.クラスタ内の他の容器は33306ポートを通じてmysqlサービスにアクセスしましたが、外部流量はmysqlサービスにアクセスできません.mysqlサービスはNodePortが配置されていません.対応するservice.yamlは以下の通りです.
apiVersion: v1
kind: Service
metadata:
 name: mysql-service
spec:
 ports:
 - port: 33306
   targetPort: 3306
 selector:
  name: mysql-pod
3.taget Port
容器のポート(最終流量ポート).ターゲットPortはpod上のポートで、portとnodePortからの流量は、クビー-proxyを経由してバックエンドpodのターゲットPortに流れ込み、最後にコンテナに入ります.
コンテナ作成時に露出されたポートと一致しており(Docker FileのEXPOSEを使用して)、例えばオフィシャルのnginx(Docker Fileを参照して)80ポートが露出されている.対応するservice.yamlは以下の通りです.
apiVersion: v1
kind: Service
metadata:
 name: nginx-service
spec:
 type: NodePort         //    NodePort,       k8s    
 ports:
 - port: 30080          //       
   targetPort: 80       //     
   nodePort: 30001      // NodePort
 selector:
  name: nginx-pod
4.まとめ
全体として、ポートとnodePortはserviceのポートであり、前者はk 8 sクラスタ内部サービスへのアクセスに曝され、後者はk 8 sクラスタ外部トラフィックへのアクセスに曝される.前の二つのポートから来たデータは全部逆プロキシクビーproxyを経て後端podのターゲットPortに流れ込み、最後にpod内の容器に到達する必要があります.
5.参考文章
Kubergnetesの中のnodePort、taget Port、portの違いと意味
Kbernetesにおけるポータブル、target port、node portの比較分析、およびkube-proxyエージェント