(O+P)ut

アウトプット



(O+P)ut

エンジニアのアウトプット

【Kubernetes】externalNameでnamespaceを超えたServiceと接続する

スポンサーリンク

やりたいこと

ある名前空間にいるPodから別の名前空間にいるServiceに対して通信を発生させる。

例として以下のサービスに対して

$ oc get service -n openshift-monitoring
NAME                          TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                      AGE...
node-exporter                 ClusterIP   None             <none>        9100/TCP                     xx ...

namespace:hogeのPodからアクセスを行いたい。

環境情報
  • Kubernetes v1.19.0

やり方

以下のようなサービスを展開すると

apiVersion: v1
kind: Service
metadata:
  name: node-exporter
  namespace: hoge
spec:
  type: ExternalName
  externalName: node-exporter.openshift-monitoring.svc.cluster.local

同namespaceのPodからサービス名で名前解決ができる。

$ nslookup node-exporter
Server:         172.21.0.X
Address:        172.21.0.X:53

node-exporter.hoge.svc.cluster.local    canonical name = node-exporter.openshift-monitoring.svc.cluster.local
Name:   node-exporter.openshift-monitoring.svc.cluster.local
Address: XX
Name:   node-exporter.openshift-monitoring.svc.cluster.local
...

以下、補足です。

補足

ExternalNameは以下のように見えてIPは入りませんが

$ oc get service
NAME                                     TYPE           CLUSTER-IP       EXTERNAL-IP                                            PORT(S)     AGE
...
node-exporter                            ExternalName   <none>           node-exporter.openshift-monitoring.svc.cluster.local   <none>      ...

該当のサービスのエイリアスのように機能します。

もちろんExternalNameを定義せずともnode-exporter.openshift-monitoring.svc.cluster.localまで指定すれば接続はできますが、Serviceとして外だしをすることで接続先を管理しやすくすることが可能です。

以上、ご参考ください。