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で受信したトラフィックをコンテナに転送します。
同じくイメージ図で説明します。
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がこう言った使い方も可能だってことを理解していればいいかもしれません。
ここまで読んでいただいて、お疲れ様でした。
コメント