Kubernetesサービスを探索しようとしています。サービス定義を読んでいると、targetPortがあり、ポートがサービス定義で指定していることがわかりました。
kind: Service
apiVersion: v1
metadata:
name: my-service
spec:
selector:
app: MyApp
ports:
- protocol: TCP
port: 80
targetPort: 9376
ここで、kubernetesサービス定義のportとtargetPortの違いは何ですか?誰も混乱を明確にしませんか?
サービス:これにより、トラフィックがポッドに転送されます。
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サービスにアクセスできます