🌁

External Serviceにはドメインを使おう

2021/04/21に公開

OpenShift外に構築したサーバーに接続しに行く必要があった。
アプリのコンテナ内は環境変数で接続先を差し込めるようにしてある。

例えば、 192.168.10.11:5432/mydb が接続先だったとする。
で、このIPアドレスの部分をOpenShiftのサービスとして登録して使えるはず、というにわか知識があった。

なので、次のようにexternal serviceを定義して、

oc create svc externalname ext-mydb --external-name 192.168.10.11

その上で接続先を ext-mydb:5432/mydb とすれば、接続先の管理を個別のアプリ内ではなくてOpenShift上に移すことができる。

と思ったのだけど、この状態で接続をトライしてもまったくうまくいかなかった。

事情としてはこの辺。

Service externalName: IP? - General Discussions - Discuss Kubernetes

https://discuss.kubernetes.io/t/service-externalname-ip/494/10

Service | Kubernetes

https://kubernetes.io/docs/concepts/services-networking/service/#services-without-selectors

なので、対応案としては2つ。(だが自分で確認できたのは前者のみ)

IPアドレスしかないのであれば、IPアドレスを含んだドメイン名で解決してくれるサービス、例えばxip.ioなどを使う。
言い換えると、192.168.10.11.xip.ioのようにexternal-nameを指定する。

もう一つはサービスとして書いた上で、Endpointリソースの定義でIPアドレスを指定する。
ただ、これはやり方が悪かったのかもしれないが、期待していた動きにはならなかった。
まずそもそもこの方法の場合、Service定義でTypeとしてClusterIPが指定必須で、ExternalNameを指定できない。この時点でoc get svcした時に一目で外部サービスだとわかるポイントを失いつつあるので既に辛い。
その上、いざ指定してみても疎通が確認できず、引っ掛かりポイントを見つけることができなかった。

今回は、xip.ioに依存してまで今回のような書き方をすることで感じられる強いメリットがなかったので諦めて純粋に接続先をパスに指定した。
小ネタで時間がサクッとなくなってちょっと困ったがとりあえずそんな感じ。

Discussion