広告

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

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.jpwww.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を内部と疎結合で使う場合によく使用されます。

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

コメント

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