やりたいこと
ある名前空間にいる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として外だしをすることで接続先を管理しやすくすることが可能です。
以上、ご参考ください。