web-dev-qa-db-ja.com

kubernetesサービス定義のtargetPortとポートの違い

Kubernetesサービスを探索しようとしています。サービス定義を読んでいると、targetPortがあり、ポートがサービス定義で指定していることがわかりました。

kind: Service
apiVersion: v1
metadata:
  name: my-service
spec:
  selector:
    app: MyApp
  ports:
  - protocol: TCP
    port: 80
    targetPort: 9376

ここで、kubernetesサービス定義のportとtargetPortの違いは何ですか?誰も混乱を明確にしませんか?

53
Jacob

サービス:これにより、トラフィックがポッドに転送されます。

TargetPort:これは、コンテナーでアプリケーションが実行されている実際のポートです。

ポート:コンテナ内のアプリケーションが異なるポートで異なるサービスを提供する場合があります。例:-実際のアプリケーションは8080を実行でき、このアプリケーションのヘルスチェックはコンテナの8089ポートで実行できます。したがって、ポートなしでサービスにアクセスすると、コンテナのどのポートにリクエストをリダイレクトする必要があるかがわかりません。サービスには、コンテナの特定のポートに到達できるようにマッピングが必要です。

kind: Service
apiVersion: v1
metadata:
  name: my-service
spec:
  selector:
    app: MyApp
  ports:
    - name: http
      nodePort: 30475
      port: 8089
      protocol: TCP
      targetPort: 8080
    - name: metrics
      nodePort: 31261
      port: 5555
      protocol: TCP
      targetPort: 5555
    - name: health
      nodePort: 30013
      port: 8443
      protocol: TCP
      targetPort: 8085 

my-service:8089にヒットすると、トラフィックはcontainer(targetPort)の8080にルーティングされます。同様に、my-service:8443をヒットすると、コンテナ(targetPort)の8085にリダイレクトされます。

しかし、このmyservice:8089はkubernetesクラスターの内部にあり、あるアプリケーションが別のアプリケーションと通信したいときに使用できます。そのため、クラスターの外部からサービスにアクセスするには、kubernetesが実行されているホストマシンのポートを公開して、トラフィックがコンテナーのポートにリダイレクトされるようにする必要があります。その中でnodePortを使用できます。

上記の例から、Host_ip:Nodeportによってクラスターの外部(Postmanまたはrestclient)からサービスにアクセスできます。

ホストマシンのIPが10.10.20.20であるとすると、10.10.20.20:30475,10.10.20.20:31261,10.10.20.20:30013までにhttp、metrics、healthサービスにアクセスできます

3
Manikanta P