サービスを公開する
https://kubernetes.io/ja/docs/tutorials/kubernetes-basics/expose/expose-intro/
なんかいろいろ公開の種類もあるが、随分ローレベルだなあと思ったらServiceとは別にIngressというやつがあるらしい。
https://kubernetes.io/ja/docs/concepts/services-networking/ingress/
Ingressにはいろいろな実装?がある。kubernetes自体が未知の領域なのでなるべく慣れたものに寄せるため、nginxによる実装を使う。
https://kubernetes.github.io/ingress-nginx/deploy/
インストール方法に with kubectl apply, using YAML manifests
がある。嬉しい。
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.6.4/deploy/static/provider/cloud/deploy.yaml
で必要なリソースが諸々立つらしい。先に作っていたDeploymentとここで作るリソースを統合するためkustomizeを導入する。と言っても
resources:
- deployment.yml
- https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.6.4/deploy/static/provider/cloud/deploy.yaml
と書かれたファイルを用意し、起動コマンドを kubectl apply -k .
に変更するだけだ。
https://github.com/chao7150/barrack-k8s-spec/commit/977fb3c90989f96c5a070508e90aad45b570adad
この段階でこれらのファイルを保存しておくGitHubのリポジトリを作った。
本題に戻って外部からいい感じに内部のサービスにリクエストが通るように進める。
https://kubernetes.github.io/ingress-nginx/deploy/#local-testing
既にDeploymentは存在するとして、exposeでそのDeploymentを公開し(これはServiceを立てることと等しいので後々ymlでそれを書く)
kubectl create ingress demo-localhost --class=nginx \
--rule="demo.localdev.me/*=demo:80"
でアクセスをDeploymentに向けるようなingressを立てる。classはいろいろあり得るingressの実装のなかでingress-nginxを使いますよという意味。ruleは demo.localdev.me/*
へのアクセスをdemoという名のDeploymentの80番ポートにフォワーディングしますよという意味。
なんで demo.localdev.me
がlocalhostに向いてるんだよと思って調べてみたら
https://qiita.com/masahata/items/89b2be02ee36b82cfced
このドメインを誰かが取得して 127.0.0.1
に向けているらしい。マジかよ。そして何の説明もなしにやるなよドキュメントで。
ここから先は本番のクラスタでやることらしいので、次回は本番のサーバにクラスタを組んでもろもろやっていくか。本番のサーバは既にgotosocialで稼働しているので、nginxでgotosocial以外へのアクセスをk8sクラスタに流す方針でやってみる。SSLオフロードとかも前段nginxでやっちゃいたい。