1. ホーム
  2. service

[解決済み】Kubernetesのサービス定義におけるtargetPortとportの違いについて

2022-04-08 08:22:45

質問

Kubernetes Service を持つことができます。 targetPortport をサービス定義に追加してください。

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

とはどのような違いがあるのでしょうか? porttargetPort ?

解決方法は?

サービス これは、トラフィックをポッドに誘導するものです。

ターゲットポート これは、コンテナ内でアプリケーションが実行される実際のポートです。

ポートです。 コンテナ内のアプリケーションが、異なるポートで異なるサービスを提供することがあります。

実際のアプリケーションは、以下のように実行できます。 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 にルーティングされます。 8080 のコンテナ(targetPort)の 同様に、もし my-service:8443 にリダイレクトされます。 8085 のコンテナ(targetPort)の しかし、この myservice:8089 はkubernetesクラスタの内部で、あるアプリケーションが他のアプリケーションと通信したいときに使用されます。そのため、クラスタの外からサービスにアクセスするには、kubernetesが動作しているホストマシンのポートを公開する必要があります。 コンテナのポートにトラフィックがリダイレクトされるように。これは node port (ホストマシンで公開されたポート)。 上の例では、クラスタの外からサービス (Postman やその他のクライアント) を呼び出すには host_ip:nodePort

あなたのホストマシンのIPが 10.10.20.20 を実行すると、http、metrics、healthの各サービスを実行することができます。 10.10.20.20:30475 , 10.10.20.20:31261 , 10.10.20.20:30013 .

編集 以下のように編集されました。 レードワルド というコメントがあります。