Kubernetesのコンテナポートとターゲットポートの違いは?
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
は一般port
にservice
(Kubernetes)を指します。私が間違っている場合は私を訂正してください。
回答
一言で言えば: targetPort
そしてcontainerPort
基本的に同じポートを参照します(したがって、両方が使用される場合、それらは同じ値を持つことが期待されます)が、それらは2つの異なるコンテキストで使用され、まったく異なる目的を持っています。
:双方は、2つの別個のkubernetesリソース/オブジェクトの仕様の一部であるように、それらはinterchangebly使用することができないService
とPod
、それぞれ。の目的はcontainerPort
純粋に情報提供として扱うことができますが、のセットを公開するtargetPort
ために必要です。Service
Pods
/仕様containerPort
で特定の値を使用して宣言しても、この特定のポートを公開することはできないことを理解することが重要です。たとえば、nginxがデフォルトではなくポートを公開することをフィールドで宣言した場合でも、コンテナでnginxサーバーを構成する必要があります。このポートでリッスンします。Pod
Deployment
Pod
containerPort
Pod
8080
80
宣言containerPort
でPod
仕様はオプションです。それがなくても、でService
宣言されている情報に基づいて、リクエストをどこに送信するかがわかりますtargetPort
。
それは、宣言する必要はないということを覚えておくことは良いことだtargetPort
でService
定義。省略した場合、デフォルトで宣言した値port
(それService
自体のポート)になります。
ポッド仕様のContainerPort
コンテナから公開するポートのリスト。ここでポートを公開すると、コンテナが使用するネットワーク接続に関する追加情報がシステムに提供されますが、これは主に情報です。ここでポートを指定しなくても、そのポートが公開されるのを防ぐことはできません
サービス仕様のtargetPort
サービスの対象となるポッドでアクセスするポートの番号または名前。番号は1〜65535の範囲である必要があります。名前はIANA_SVC_NAMEである必要があります。これが文字列の場合、ターゲットポッドのコンテナポートで名前付きポートとして検索されます。これが指定されていない場合、「ポート」フィールドの値が使用されます(IDマップ)。
したがってtargetPort
、インサービスcontainerPort
はインポッドの仕様と一致する必要があります。これは、サービスがトラフィックの転送先となるコンテナポートを認識する方法だからです。