広告

kubernetes – None-Selector Service

infrastructure as code

Service概要

  • Service
    • ClusterIP:k8s内部ロードバランサー
    • ExternalIP(ClusterIPに属する):指定のNodeのIPを使って、外部と通信可能なClusterIP
    • NodePort:任意NodeのIPを使って、外部からk8s内部への通信を可能にするリソース
    • LoadBalancer:外部ロードバランサー + NodePort + ClusterIP
    • Headless(None)(ClusterIPに属する):主にStatefulSetのためのClusterIP
    • ExternalName:k8sのCNAME変換用リソース
    • None-Selector(ClusterIPに属する):Endpointsをカスタマイズ可能なClusterIP

None-Selector Service

manifestのリソース指定:
kind: Service
spec.type: ClusterIP

None-Selectorは、PodのIPプール(Endpoints)を作って、ClusterIPのロードバランシング先をEndpointsにするServiceです。
このServiceは、自由に転送先PodをIPで指定できるServiceです。
その代わり、Selector(labelなどの条件で転送先Podを指定する方法)での指定ができなくなります。

Endpoints

manifestのリソース指定:
kind: Endpoints

EndpointsはPodのプールを作るリソースです。
ここでは、ロードバランシング先のメンバーを登録するために使います。

このリソースは実に、ClusterIPやLoadBalancerなどのServiceで自動的に作成してくれるものです。
自動作成で特に気にする必要はなかったですが、カスタマイズする時には、自分で作る必要があります。

None-SelectorとEndpointsを紐づく条件

  • None-Selector(ClusterIP)のmetadata.nameが、Endpointsのmetadata.nameが一致であること

Endpoints + ClusterIP併用例

# ClusterIP作成
apiVersion: v1
kind: Service
metadata:
  name: none-selector-service
spec:
  ports:
    - protocol: TCP
      port: 8080  # ClusterIPの受付Port
      targetPort: 80  # Podの受付Port
---
# Endpoints作成
apiVersion: v1
kind: Endpoints
metadata:
  name: none-selector-service  # 関連付け先のServiceのmetadata.nameと同じ値に指定する必要がある
subsets:
  - addresses:
      - ip: 192.0.2.42  # EndpointsのPodのIP
      - ip: 192.0.2.43  # EndpointsのPodのIP
    ports:  # Pod受付Port指定
      - protocol: TCP
      - port: 80

最後に

一般的なシナリオで、None-Selector以外のServiceで要件を満たせることが可能なので、None-Selectorが使われるケースは少ないと思います。
知識として知っておいた方が、通信の転送の理解を深めることができるかと思います。

k8sのServiceについて、今回ですべてご紹介しました。
ここまで読んでいただいて、お疲れ様でした。

コメント

タイトルとURLをコピーしました