サービスを使用すると、相互に互換可能な1つ以上のポッドへのアクセスを公開できます。ポッドはローリング更新やスケーラビリティのためにレプリケートできるため、アプリケーションへのクライアント・アクセスは、適切なアプリケーションを実行しているポッドに転送する必要があります。また、Kubernetesの外側にあるアプリケーションへのアクセスが必要になることもあります。どちらの場合も、実際のバックエンドが変更されたとしても、そうした機能へのアクセスを透過的にするサービスを定義できます。
一般に、サービスはポートとIPのマッピングによって構成されます。ネットワーク空間でサービスが機能する方法は、サービスの作成時のサービス・タイプによって定義します。
デフォルトのサービス・タイプはClusterIP
です。このタイプは、クラスタの内部IPでサービスを公開する場合に使用できます。このオプションは、サービスをクラスタ内からのみアクセスできるようにします。そのため、このオプションは、クラスタ内から相互にアクセスできるようにする必要があるアプリケーションのためにサービスを公開する場合に使用します。
多くの場合、Kubernetesクラスタの外側にあるクライアントが、クラスタ内のサービスにアクセスすることが必要になります。これは、NodePort
サービス・タイプを作成することで実現できます。このサービス・タイプでは、すべてのワーカー・ノードで実行しているKube Proxyサービスを利用して、NodePort
と同時に自動的に作成されるClusterIP
にトラフィックを再ルーティングできます。このサービスは、NodePort
という静的ポートで各ノードIPに公開されます。Kube ProxyはNodePort
宛てのトラフィックをクラスタにルーティングします。そのトラフィックは、クラスタ内で実行中のポッドによって処理されます。そのため、NodePort
サービスがクラスタ内で実行されていると、ポッドが実行されている場所に関係なく、クラスタ内のいずれかのノードを経由してアクセスできるようになります。
これらのサービスの上部に構築されているLoadBalancer
サービス・タイプでは、クラウド・プロバイダのロード・バランサを使用することで外部にサービスを公開することが可能になります。これにより、外部のロード・バランサは、クラスタ内のポッドへのKube Proxyを経由するトラフィックのリダイレクトを直接処理できるようになります。NodePort
サービスとClusterIP
サービスは、LoadBalancer
サービスの設定時に自動的に作成されます。
異なるポッドにサービスを追加するときには、サービスの宣言のたびに、トラフィックが遮断されないように適切にネットワークが構成されていることを確認してください。NodePort
サービスまたはLoadBalancer
サービスを作成する場合は、公開されるポートも所定のファイアウォールを通過してアクセスできる必要があります。
Oracle Cloud Infrastructureを使用している場合は、Virtual Cloud Network (VCN)のセキュリティ・リストにコンピュート・インスタンスの接続用のイングレス・ルールを追加する必要があります。それぞれのルールでは、サービスに対して公開したポートにアクセスできるようにする必要があります。
同様に、いずれかのノードでfirewalldを実行している場合は、作成するサービスの外部向けポートのトラフィックを許可するルールを追加する必要があります。
サービスの詳細は、次の場所にあるアップストリームのドキュメントを参照してください。
https://kubernetes.io/docs/concepts/services-networking/service/