1.1.4 サービス

サービスを使用すると、相互に互換可能な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/