Kubernetesのコンテナポートとターゲットポートの違いは?

Aug 17 2020

Kubernetesのコンテナとはどうcontainer port違うのtargetportsですか?それらは同じ意味で使用されていますか?もしそうなら、なぜですか?

Kubernetesのポッド上containerPortを示すために使用される以下のコードスニペットに出くわしましたport

apiVersion: apps/v1
kind: Deployment
metadata:
  name: postgres-deployment
  labels:
    app: demo-voting-app
spec:
  replicas: 1
  selector:
    matchLabels:
      name: postgres-pod
      app: demo-voting-app
  template:
    metadata:
      name: postgres-pod
      labels:
        name: postgres-pod
        app: demo-voting-app

    spec:
      containers:
      - name: postgres
        image: postgres:9.4
        ports:
        - containerPort: 5432
        

上記のコードスニペットでは、containerPortパラメーターに5432が指定されています(最後の行)。それで、これはどうcontainerPort違うのtargetportですか?

私の知る限り、この用語portは一般portservice(Kubernetes)を指します。私が間違っている場合は私を訂正してください。

回答

4 mario Aug 18 2020 at 16:17

一言で言えば: targetPortそしてcontainerPort基本的に同じポートを参照します(したがって、両方が使用される場合、それらは同じ値を持つことが期待されます)が、それらは2つの異なるコンテキストで使用され、まったく異なる目的を持っています。

:双方は、2つの別個のkubernetesリソース/オブジェクトの仕様の一部であるように、それらはinterchangebly使用することができないServicePod、それぞれ。の目的はcontainerPort純粋に情報提供として扱うことができますが、のセットを公開するtargetPortために必要です。ServicePods

/仕様containerPortで特定の値を使用して宣言しても、この特定のポートを公開することはできないことを理解することが重要です。たとえば、nginxがデフォルトではなくポートを公開することをフィールドで宣言した場合でも、コンテナでnginxサーバーを構成する必要があります。このポートでリッスンします。PodDeploymentPodcontainerPortPod808080

宣言containerPortPod仕様はオプションです。それがなくても、でService宣言されている情報に基づいて、リクエストをどこに送信するかがわかりますtargetPort

それは、宣言する必要はないということを覚えておくことは良いことだtargetPortService定義。省略した場合、デフォルトで宣言した値port(それService自体のポート)になります。

2 ArghyaSadhu Aug 17 2020 at 10:05

ポッド仕様のContainerPort

コンテナから公開するポートのリスト。ここでポートを公開すると、コンテナが使用するネットワーク接続に関する追加情報がシステムに提供されますが、これは主に情報です。ここでポートを指定しなくても、そのポートが公開されるのを防ぐことはできません

サービス仕様のtargetPort

サービスの対象となるポッドでアクセスするポートの番号または名前。番号は1〜65535の範囲である必要があります。名前はIANA_SVC_NAMEである必要があります。これが文字列の場合、ターゲットポッドのコンテナポートで名前付きポートとして検索されます。これが指定されていない場合、「ポート」フィールドの値が使用されます(IDマップ)。

したがってtargetPort、インサービスcontainerPortはインポッドの仕様と一致する必要があります。これは、サービスがトラフィックの転送先となるコンテナポートを認識する方法だからです。