社内の新規サービスを開発するにあたり、これまでインフラの手作業によるごちゃごちゃや、開発環境構築に課題を感じていたので、dockerを使い、さらにはそのまま本番までクラウドでやろうと考えた。
dockerは今回置いておいて、GKEで独自ドメインで公開するにはどうするのかわからず、ちょっとはまった。
Google Container Engine(GKE)& kubernetesは検索した限り、まだまだ包括的で分かりやすいドキュメントはない
公式のチュートリアルをやるのが一番早かった。
これはnode.jsだけど、自分で作ったdockerのimage、名前に置き換えるだけで問題なくできた。
yamlとかどう書いたらいいか、まったくどこにも情報がないけど、コマンドで操作しているうちにほぼ自動でできてしまうということが分かり脱力。
kubectl expose deployment hello-node --type="LoadBalancer"
でEXTERNAL-IPは取得できるけど、一回消したりするたびに、変わってしまうので、独自ドメインには使いづらい。
kubectl expose deployment
% kubectl get services NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes 10.**.240.1 <none> 443/TCP 3h oceanus-collect 10.**.251.232 104.***.134.41 80/TCP 3h
GKEの管理画面や操作コマンドにオプションでstatic ipみたいのあるのかと思ってたけど、GCPの管理画面のネットーワークから静的IPを指定できる。
クラスターなどと紐づいている限り、追加料金は発生しないみたい。
your-project-nameに自分のプロジェクト名を入れて開ける
https://console.cloud.google.com/networking/addresses/list?project=
静的IPに変更したら、
kubectl edit service oceanus-collect
でspec以下にloadBalancerIPを追加する。
追加しないと、exposeしてもIPがつかなかった。
spec: clusterIP: 10.63.240.xx loadBalancerIP: 104.196.134.xx
kubectl editは、文法エラー等があると、再度編集に入るので便利。
specの一番下に追加したけど、ClusterIPの下に入るので、勝手にいい感じの並びにしてくれるようだ。
しばらくすると反映される
もちろん、serviceをdeleteしてしまうとリセットされてしまうので、次回exposeのときに--load-balancer-ip=で指定する
% kubectl expose deployment oceanus --type="LoadBalancer" --load-balancer-ip="104.196.134.xx"