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
ExternalName Service
manifestのリソース指定:
kind: Service
spec.type: ExternalName
spec.externalName
ExternalName Serviceは簡単にいうと、k8sクラスタ内部DNSにCNAMEを登録するServiceです。
k8s外部のFQDNをk8s内部のDNSに別名で登録するに使用します。
例えば、www.google.co.jp
をk8s内部で<externalName Service名>
として認識させるとかです。
機能はすごくシンプルで、明確なので、イメージ図はなくてもいいかなw(小声)
この機能の用途は、内部から外部へのアクセスの疎結合です。
疎結合とは、外部に変かがあっても、コンテナ内のコードをいじる必要がなく、設定だけ変えればいいようにできることです。
例えば、コンテナのプログラムはwww.google.co.jp
をアクセスして仕事をしているとします。
ある日、www.google.co.jp
がwww.goo.com
に変わったら、コンテナ内のこの部分のコードも書き換えないと使い物にならないですよね。
そこで、ExternalNameを使えば、コンテナは<externalName Service名>
でアクセスするので、
ExternalName Serviceの設定を変えれば、修正が完了します。
※コードの修正はリリースの流れに沿わないといけないので、一行の修正でも大袈裟になります。特に製品になった場合です。
注意点:ClusterIPからExternalNameへ切り替えるときに、spec.clusterIP: ""
にする必要があります。
ExternalNameのmanifest例
apiVersion: v1
kind: Service
metadata:
name: google-service # 内部で識別される名前
namespace: prod
spec:
type: ExternalName
externalName: www.google.co.jp # 外部サーバのFQDN
最後に
ExternalName Serviceはk8s内部でCNAMEを登録するために使うServiceです。
外部のFQDNを内部と疎結合で使う場合によく使用されます。
ここまで読んでいただいて、お疲れ様でした。
コメント