第17章 Service [v1]
- 説明
- サービスは、プロキシーがリッスンするローカルポート (たとえば 3306) と、プロキシーを介して送信された要求に応答する Pod を決定するセレクターで設定されるソフトウェアサービス (たとえば、mysql) の名前付き抽象化です。
- タイプ
-
object
17.1. 仕様
プロパティー | 型 | 説明 |
---|---|---|
|
| APIVersion はオブジェクトのこの表現のバージョンスキーマを定義します。サーバーは認識されたスキーマを最新の内部値に変換し、認識されない値は拒否することがあります。詳細は、https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources を参照してください。 |
|
| kind はこのオブジェクトが表す REST リソースを表す文字列の値です。サーバーはクライアントが要求を送信するエンドポイントからこれを推測できることがあります。更新はできません。CamelCase を使用します。詳細は、https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds を参照してください。 |
| 標準オブジェクトのメタデータ。詳細は、https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata を参照してください。 | |
|
| ServiceSpec は、ユーザーがサービスで作成する属性を記述します。 |
|
| ServiceStatus は、サービスの現在のステータスを表します。 |
17.1.1. .spec
- 説明
- ServiceSpec は、ユーザーがサービスで作成する属性を記述します。
- タイプ
-
object
プロパティー | 型 | 説明 |
---|---|---|
|
| locateLoadBalancerNodePorts は、NodePorts がタイプ LoadBalancer のサービスに自動的に割り当てられるかどうかを定義します。(デフォルトは True)クラスターロードバランサーが NodePorts に依存していない場合は、false に設定できます。呼び出し元が (値を指定して) 特定の NodePort を要求した場合、このフィールドに関係なく、それらの要求は尊重されます。このフィールドは、タイプ LoadBalancer のサービスに対してのみ設定でき、タイプが他のタイプに変更された場合にクリアされます。 |
|
| clusterIP はサービスの IP アドレスであり、通常はランダムに割り当てられます。アドレスが手動で指定され、範囲内にあり (システム設定に従って)、使用されていない場合、アドレスはサービスに割り当てられます。そうしないと、サービスの作成が失敗します。タイプフィールドも ExternalName に変更されている場合 (このフィールドは空白である必要があります)、またはタイプフィールドが ExternalName から変更されている場合 (この場合、このフィールドはオプションで指定できます) を除き、更新によってこのフィールドを変更することはできません。)。有効な値は、なし、空の文字列 ("")、または有効な IP アドレスです。これをなしに設定すると、ヘッドレスサービス (仮想 IP なし) になります。これは、直接エンドポイント接続が優先され、プロキシーが不要な場合に役立ちます。タイプ ClusterIP、NodePort、および LoadBalancer にのみ適用されます。タイプ ExternalName のサービスを作成するときにこのフィールドを指定すると、作成は失敗します。このフィールドは、サービスを ExternalName タイプに更新するときに消去されます。詳細: https://github.com/thanos-io/thanos/blob/master/docs/components/rule.md#partial-response |
|
| ClusterIPs は、このサービスに割り当てられた IP アドレスのリストであり、通常はランダムに割り当てられます。アドレスが手動で指定され、範囲内にあり (システム設定に従って)、使用されていない場合、アドレスはサービスに割り当てられます。そうしないと、サービスの作成が失敗します。タイプフィールドも ExternalName に変更されている場合 (このフィールドは空である必要があります)、またはタイプフィールドが ExternalName から変更されている場合 (この場合、上記のように、このフィールドはオプションで指定できます) でない限り、このフィールドは更新によって変更できません。)。有効な値は、なし、空の文字列 ("")、または有効な IP アドレスです。これをなしに設定すると、ヘッドレスサービス (仮想 IP なし) になります。これは、直接エンドポイント接続が優先され、プロキシーが不要な場合に役立ちます。タイプ ClusterIP、NodePort、および LoadBalancer にのみ適用されます。タイプ ExternalName のサービスを作成するときにこのフィールドを指定すると、作成は失敗します。このフィールドは、サービスを ExternalName タイプに更新するときに消去されます。このフィールドが指定されていない場合、clusterIP フィールドから初期化されます。このフィールドを指定する場合、クライアントは clusterIPs0 と clusterIP の値が同じであることを確認する必要があります。 このフィールドには、最大 2 つのエントリー (デュアルスタック IP、順序を問わず) を保持できます。これらの IP は、ipFamilies フィールドの値に対応している必要があります。clusterIP と ipFamilies はどちらも、ipFamilyPolicy フィールドによって管理されます。詳細: https://github.com/thanos-io/thanos/blob/master/docs/components/rule.md#partial-response |
|
| externalIPs は、クラスター内のノードがこのサービスのトラフィックも受け入れる IP アドレスのリストです。これらの IP は Kubernetes によって管理されていません。ユーザーは、トラフィックがこの IP を持つノードに確実に到着するようにする責任があります。一般的な例は、Kubernetes システムの一部ではない外部ロードバランサーです。 |
|
|
externalName は、検出メカニズムがこのサービスのエイリアスとして返す外部参照です (DNS CNAME レコードなど)。プロキシーは含まれません。小文字の RFC-1123 ホスト名 (https://tools.ietf.org/html/rfc1123) である必要があり、 |
|
| externalTrafficPolicy は、ノードがサービスの外部に面したアドレス (NodePort、ExternalIP、および LoadBalancer IP) の 1 つで受信するサービストラフィックを分散する方法を記述します。"Local" に設定すると、プロキシーは、外部ロードバランサーがノード間のサービストラフィックのバランスを取ることを想定した方法でサービスを設定します。そのため、各ノードは、クライアントのソース IP をマスカレードすることなく、サービスの node-local エンドポイントにのみトラフィックを配信します。(エンドポイントのないノードに誤って送信されたトラフィックはドロップされます。)デフォルト値の "Cluster" では、すべてのエンドポイントに均等にルーティングするという標準動作が使用されます (トポロジーやその他の機能によって変更される可能性があります)。クラスター内から外部 IP またはロードバランサー IP に送信されるトラフィックは常にクラスターセマンティクスを取得しますが、クラスター内から NodePort に送信するクライアントは、ノードの選択時にトラフィックポリシーを考慮する必要がある場合があることに注意してください。
使用可能な列挙値: - |
|
| healthCheckNodePort は、サービスのヘルスチェック nodePort を指定します。これは、type が LoadBalancer に設定され、externalTrafficPolicy が Local に設定されている場合にのみ適用されます。値が指定され、範囲内にあり、使用されていない場合、その値が使用されます。指定しない場合、値が自動的に割り当てられます。外部システム (ロードバランサーなど) は、このポートを使用して、特定のノードがこのサービスのエンドポイントを保持しているかどうかを判断できます。このフィールドを必要としないサービスを作成するときにこのフィールドを指定すると、作成は失敗します。このフィールドは、サービスを更新して不要になると消去されます (タイプの変更など)。このフィールドは、一度設定すると更新できません。 |
|
| InternalTrafficPolicy は、ノードが ClusterIP 上で受信するサービストラフィックを分散する方法を記述します。Local に設定すると、プロキシーは、Pod と同じノード上のサービスのエンドポイントのみと対話すると想定し、ローカルエンドポイントがない場合はトラフィックをドロップします。デフォルト値の "Cluster" では、すべてのエンドポイントに均等にルーティングするという標準動作が使用されます (トポロジーやその他の機能によって変更される可能性があります)。 |
|
| IPFamilies は、このサービスに割り当てられた IP ファミリー (IPv4、IPv6 など) のリストです。このフィールドは通常、クラスター設定と ipFamilyPolicy フィールドに基づいて自動的に割り当てられます。このフィールドを手動で指定した場合、要求されたファミリーはクラスターで使用可能であり、ipFamilyPolicy で許可されている場合は、それが使用されます。そうしないと、サービスの作成が失敗します。このフィールドは条件付きで変更可能です。セカンダリー IP ファミリーを追加または削除することはできますが、サービスのプライマリー IP ファミリーを変更することはできません。有効な値は IPv4 および IPv6 です。このフィールドは、タイプ ClusterIP、NodePort、および LoadBalancer のサービスにのみ適用され、ヘッドレスサービスに適用されます。このフィールドは、サービスを ExternalName タイプに更新するときに消去されます。 このフィールドには、最大 2 つのエントリー (デュアルスタックファミリー、いずれかの順序) を含めることができます。これらのファミリーは、指定されている場合、clusterIPs フィールドの値に対応している必要があります。clusterIP と ipFamilies はどちらも、ipFamilyPolicy フィールドによって管理されます。 |
|
| IPFamilyPolicy は、このサービスが必要とする、または要求するデュアルスタック性を表します。値が指定されていない場合、このフィールドは SingleStack に設定されます。サービスには、SingleStack (単一の IP ファミリー)、PreferDualStack (デュアルスタック設定クラスター上の 2 つの IP ファミリー、またはシングルスタッククラスター上の単一の IP ファミリー)、または RequireDualStack (デュアルスタック上の 2 つの IP ファミリー) があります。設定されたクラスター、それ以外の場合は失敗します)。ipFamilies フィールドと clusterIPs フィールドは、このフィールドの値によって異なります。このフィールドは、サービスを ExternalName タイプに更新するときに消去されます。 |
|
| loadBalancerClass は、このサービスが属するロードバランサー実装のクラスです。指定する場合、このフィールドの値は、internal-vip や example.com/internal-vip などのオプションの接頭辞を付けたラベルスタイルの識別子である必要があります。接頭辞のない名前はエンドユーザー用に予約されています。このフィールドは、サービスタイプが LoadBalancer の場合にのみ設定できます。設定されていない場合、デフォルトのロードバランサーの実装が使用されます。現在、これは通常、クラウドプロバイダーの統合を通じて行われますが、デフォルトの実装に適用する必要があります。設定されている場合、ロードバランサーの実装は一致するクラスのサービスを監視していると見なされます。デフォルトのロードバランサーの実装 (クラウドプロバイダーなど) は、このフィールドを設定するサービスを無視する必要があります。このフィールドは、サービスを作成または更新して LoadBalancer と入力する場合にのみ設定できます。一度設定すると変更できません。このフィールドは、サービスが LoadBalancer 以外のタイプに更新されると消去されます。 |
|
| サービスタイプ: LoadBalancer にのみ適用されます。この機能は、ロードバランサーの作成時に、基礎となるクラウドプロバイダーが loadBalancerIP の指定をサポートするかどうかによって異なります。クラウドプロバイダーがこの機能をサポートしていない場合、このフィールドは無視されます。非推奨: このフィールドは仕様が不十分であり、その意味は実装によって異なり、デュアルスタックをサポートできません。Kubernetes v1.24 以降、ユーザーは実装固有のアノテーションが利用可能な場合にはそれを使用することが推奨されます。このフィールドは、将来の API バージョンでは削除される可能性があります。 |
|
| プラットフォームで指定およびサポートされている場合、これによりクラウドプロバイダーのロードバランサーを通過するトラフィックが制限され、指定されたクライアント IP に制限されます。クラウドプロバイダーがこの機能をサポートしていない場合、このフィールドは無視されます。詳細: https://kubernetes.io/docs/tasks/access-application-cluster/create-external-load-balancer/ |
|
| このサービスによって公開されるポートのリスト。詳細: https://github.com/thanos-io/thanos/blob/master/docs/components/rule.md#partial-response |
|
| ServicePort には、サービスのポートに関する情報が含まれています。 |
|
| publishNotReadyAddresses は、このサービスのエンドポイントを処理するエージェントは、準備完了/準備完了の兆候を無視する必要があることを示します。このフィールドを設定する主な使用例は、StatefulSet のヘッドレスサービスがピア検出の目的で Pod の SRVDNS レコードを伝播することです。サービスのエンドポイントと EndpointSlice リソースを生成する Kubernetes コントローラーは、Pod 自体が準備完了でなくても、すべてのエンドポイントが準備完了と見なされることを意味すると解釈します。Endpoints または EndpointSlice リソースを介して Kubernetes で生成されたエンドポイントのみを消費するエージェントは、この動作を安全に想定できます。 |
|
| このセレクターと一致するラベルキーと値を使用して、サービストラフィックを Pod にルーティングします。空または存在しない場合、サービスにはエンドポイントを管理する外部プロセスがあると見なされ、Kubernetes はこれを変更しません。タイプ ClusterIP、NodePort、および LoadBalancer にのみ適用されます。タイプが ExternalName の場合は無視されます。詳細: https://kubernetes.io/docs/concepts/services-networking/service/ |
|
| ClientIP と None をサポートします。セッションアフィニティーを維持するために使用されます。クライアント IP ベースのセッションアフィニティーを有効にします。ClientIP または None である必要があります。デフォルトは None です。詳細: https://github.com/thanos-io/thanos/blob/master/docs/components/rule.md#partial-response
使用可能な列挙値: - |
|
| SessionAffinityConfig は、セッションアフィニティーの設定を表します。 |
|
| タイプは、サービスの公開方法を決定します。デフォルトは ClusterIP です。有効なオプションは、ExternalName、ClusterIP、NodePort、および LoadBalancer です。ClusterIP は、負荷分散のためにクラスター内部の IP アドレスをエンドポイントに割り当てます。エンドポイントは、セレクターによって決定されます。指定されていない場合は、Endpoints オブジェクトまたは EndpointSlice オブジェクトを手動で作成します。clusterIP が None の場合、仮想 IP は割り当てられず、エンドポイントは仮想 IP ではなくエンドポイントのセットとして公開されます。NodePort は ClusterIP に基づいて構築され、clusterIP と同じエンドポイントにルーティングするすべてのノードにポートを割り当てます。LoadBalancer は NodePort 上に構築され、clusterIP と同じエンドポイントにルーティングする外部ロードバランサー (現在のクラウドでサポートされている場合) を作成します。ExternalName は、このサービスを指定された externalName にエイリアスします。他のいくつかのフィールドは、ExternalName サービスには適用されません。詳細: https://kubernetes.io/docs/concepts/services-networking/service/#publishing-services-service-types
使用可能な列挙値: - |
17.1.2. .spec.ports
- 説明
- このサービスによって公開されるポートのリスト。詳細: https://github.com/thanos-io/thanos/blob/master/docs/components/rule.md#partial-response
- タイプ
-
array
17.1.3. .spec.ports[]
- 説明
- ServicePort には、サービスのポートに関する情報が含まれています。
- タイプ
-
object
- 必須
-
port
-
プロパティー | 型 | 説明 |
---|---|---|
|
| このポートのアプリケーションプロトコル。このフィールドは、標準の Kubernetes ラベル構文に従います。接頭辞のない名前は、IANA 標準サービス名用に予約されています (RFC-6335 および https://www.iana.org/assignments/service-names に準拠)。非標準プロトコルでは、mycompany.com/my-custom-protocol などの接頭辞名を使用する必要があります。 |
|
| サービス内のこのポートの名前。これは DNS_LABEL である必要があります。ServiceSpec 内のすべてのポートには、一意の名前を付ける必要があります。サービスのエンドポイントを検討する場合、これは EndpointPort の name フィールドと一致する必要があります。このサービスで ServicePort が 1 つだけ定義されている場合はオプション。 |
|
| タイプが NodePort または LoadBalancer の場合に、このサービスが公開される各ノードのポート。通常、システムによって割り当てられます。値が指定され、範囲内にあり、使用されていない場合、その値が使用されます。指定されていない場合、操作は失敗します。指定されていない場合、このサービスでポートが必要な場合はポートが割り当てられます。このフィールドを必要としないサービスを作成するときにこのフィールドを指定すると、作成は失敗します。このフィールドは、サービスを更新して不要になると消去されます (たとえば、タイプを NodePort から ClusterIP に変更する場合)。詳細: https://kubernetes.io/docs/concepts/services-networking/service/#type-nodeport |
|
| このサービスによって公開されるポート。 |
|
| このポートの IP プロトコル。TCP、UDP、および SCTP をサポートします。デフォルトは TCP です。
使用可能な列挙値: - |
| サービスの対象となる Pod でアクセスするポートの番号または名前。番号は 1〜65535 の範囲である必要があります。名前は IANA_SVC_NAME である必要があります。これが文字列の場合、ターゲット Pod のコンテナーポートで名前付きポートとして検索されます。これが指定されていない場合、ポートフィールドの値が使用されます (ID マップ)。このフィールドは、clusterIP = None のサービスでは無視されるため、省略するか、port フィールドと同じに設定する必要があります。詳細: https://kubernetes.io/docs/concepts/services-networking/service/#defining-a-service |
17.1.4. .spec.sessionAffinityConfig
- 説明
- SessionAffinityConfig は、セッションアフィニティーの設定を表します。
- タイプ
-
object
プロパティー | 型 | 説明 |
---|---|---|
|
| ClientIPConfig は、クライアント IP ベースのセッションアフィニティーの設定を表します。 |
17.1.5. .spec.sessionAffinityConfig.clientIP
- 説明
- ClientIPConfig は、クライアント IP ベースのセッションアフィニティーの設定を表します。
- タイプ
-
object
プロパティー | 型 | 説明 |
---|---|---|
|
| timeoutSeconds は、ClientIP タイプのセッションスティッキー時間の秒数を指定します。ServiceAffinity == "ClientIP" の場合、値は > 0 &&⇐86400(1 日間) である必要があります。デフォルト値は 10800(3 時間) です。 |
17.1.6. .status
- 説明
- ServiceStatus は、サービスの現在のステータスを表します。
- タイプ
-
object
プロパティー | 型 | 説明 |
---|---|---|
| 現在のサービス状態 | |
|
| LoadBalancerStatus はロードバランサーのステータスを表します。 |
17.1.7. .status.loadBalancer
- 説明
- LoadBalancerStatus はロードバランサーのステータスを表します。
- タイプ
-
object
プロパティー | 型 | 説明 |
---|---|---|
|
| Ingress はロードバランサーの Ingress ポイントを含むリストです。サービス向けのトラフィックは、これらの Ingress ポイントに送信する必要があります。 |
|
| LoadBalancerIngress は、ロードバランサーの入力ポイントのステータスを表します。サービスを対象としたトラフィックは、入力ポイントに送信する必要があります。 |
17.1.8. .status.loadBalancer.ingress
- 説明
- Ingress はロードバランサーの Ingress ポイントを含むリストです。サービス向けのトラフィックは、これらの Ingress ポイントに送信する必要があります。
- タイプ
-
array
17.1.9. .status.loadBalancer.ingress[]
- 説明
- LoadBalancerIngress は、ロードバランサーの入力ポイントのステータスを表します。サービスを対象としたトラフィックは、入力ポイントに送信する必要があります。
- タイプ
-
object
プロパティー | 型 | 説明 |
---|---|---|
|
| ホスト名は、DNS ベースのロードバランサー入力ポイント (通常は AWS ロードバランサー) に設定されます |
|
| IP は、IP ベースのロードバランサー入力ポイント (通常は GCE または OpenStack ロードバランサー) に設定されます |
|
| ポートは、サービスポートのレコードのリストです。使用する場合、サービスで定義されているすべてのポートにエントリーが必要です。 |
|
|
17.1.10. .status.loadBalancer.ingress[].ports
- 説明
- ポートは、サービスポートのレコードのリストです。使用する場合、サービスで定義されているすべてのポートにエントリーが必要です。
- タイプ
-
array
17.1.11. .status.loadBalancer.ingress[].ports[]
- 説明
- 型
-
object
- 必須
-
port
-
protocol
-
プロパティー | 型 | 説明 |
---|---|---|
|
| エラーは、サービスポートの問題を記録することです。エラーの形式は、次のルールに準拠する必要があります。- 組み込みのエラー値をこのファイルに指定し、キャメルケース名を使用する必要があります - クラウドプロバイダー固有のエラー値には、次の名前を付ける必要があります foo.example.com/CamelCase の形式に準拠します。 |
|
| ポートは、ステータスがここに記録されるサービスポートのポート番号です。 |
|
| プロトコルは、ステータスがここに記録されるサービスポートのプロトコルです。サポートされる値は、TCP、UDP、SCTP です。
使用可能な列挙値: - |