3.3.3.5. ヘッドレスサービス
アプリケーションがロードバランシングや単一サービス IP アドレスを必要しない場合、ヘッドレスサービスを作成できます。ヘッドレスサービスを作成する場合、ロードバランシングやプロキシー送信は実行されず、クラスター IP はこのサービスに割り当てられません。これらのサービスの場合、サービスにセレクターが定義されているかどうかによって DNS が自動的に設定されます。
サービスとセレクター: セレクターを定義するヘッドレスサービスの場合、エンドポイントコントローラーは API の Endpoints
レコードを作成し、DNS 設定を変更して、サービスをサポートする Pod を直接ポイントする A
レコード (アドレス) を返します。
セレクターなしのサービス: セレクターを定義しないヘッドレスサービスの場合、エンドポイントコントローラーは Endpoints
レコードを作成しません。ただし、DNS システムは以下のレコードを検索し、設定します。
-
ExternalName
タイプサービスの場合は、CNAME
レコードになります。 -
それ以外のすべてのサービスタイプの場合、サービスと名前を共有するエンドポイントの
A
レコードになります。
3.3.3.5.1. ヘッドレスサービスの作成
ヘッドレスサービスの作成は標準的なサービスの作成と同様ですが、ClusterIP
アドレスを宣言しません。ヘッドレスサービスを作成するには、clusterIP: None
パラメーター値をサービス YAML 定義に追加します。
たとえば、以下は Pod のグループを同じクラスターまたはサービスの一部として組み込む場合です。
Pod の一覧
$ oc get pods -o wide
出力例
NAME READY STATUS RESTARTS AGE IP NODE frontend-1-287hw 1/1 Running 0 7m 172.17.0.3 node_1 frontend-1-68km5 1/1 Running 0 7m 172.17.0.6 node_1
ヘッドレスサービスを以下のように定義できます。
ヘッドレスサービス定義
apiVersion: v1 kind: Service metadata: labels: app: ruby-helloworld-sample template: application-template-stibuild name: frontend-headless 1 spec: clusterIP: None 2 ports: - name: web port: 5432 protocol: TCP targetPort: 8080 selector: name: frontend 3 sessionAffinity: None type: ClusterIP status: loadBalancer: {}
また、ヘッドレスサービスには独自の IP アドレスがありません。
$ oc get svc
出力例
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE frontend ClusterIP 172.30.232.77 <none> 5432/TCP 12m frontend-headless ClusterIP None <none> 5432/TCP 10m