広告

kubernetes – ExternalIP 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

ExternalIP Service

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

ExternalIPはClusterIPの一種ですが、k8sクラスタ外部からの通信を内部に流すことが可能です。
その方法は、指定のNodeのIP:Portで受信したトラフィックをコンテナに転送します。

同じくイメージ図で説明します。

ExternalIP
k8sクラスタ外部から、ExternalIPが指定したNodeのIP:Portに対しての通信が、ExternalIPを経由して、Podへ転送されます。

特徴:

  • k8sクラスタ外部からの通信を内部に転送可能
    • spec.externalIPs[]で指定したNodeのみ転送する
  • 本質はClusterIPのため、ClusterIPの内部IPも持っているし、特徴も同じ
  • spec.ports[].portはNodeとClusterIP両方の受付Portを指定する
  • GCPのグローバルIPアドレスは利用不可

特徴から見ると、外部からの通信を転送するに使うには未完成品の感じはしますよね。

では、次のリソースを見ていきましょう

ExternalIP manifest例

apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  selector:
    app: MyApp
  ports:
    - name: http
      protocol: TCP
      port: 80
      targetPort: 9376
  externalIPs:  # ClusterIPにNodeのIPを指定することで、受付できるようになる
    - 10.20.0.1  # NodeのIP
    - 10.20.0.2  # NodeのIP

最後に

k8sでは、ExternalIPをそのまま使うことは滅多にないと思います。
ClusterIPがこう言った使い方も可能だってことを理解していればいいかもしれません。

ここまで読んでいただいて、お疲れ様でした。

コメント

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