概要
前回は$10/月のKubernetesクラスタを作成しました。
ここに自分用のWebサービスなどをデプロイすれば個人サーバとして活用できるわけですが、いつまでもIPアドレスでアクセスするというのはダサいですね。 今回は無料でドメインを取得しKubernetes上のサービスをその名前でアクセスできるようにしてみます。

ドメインをとるのはちょっと・・・という人はcurlのオプションでヘッダをつけてアクセスすることでその挙動を確認することができます。(が今回の記事では触れません)
TKドメインの取得
トラケウのドメインである.tkは無料で取得できます。
もちろんすでにドメインを持っている人はこのような怪しいドメインを取得する必要はありません
とれるかな、、
いけそう!
kubernetesのmasterのIPアドレスを入れる(あとで変えるので何でもよいのですが、、)
いい感じに入力する
下記からアクセスすると所有しているドメインの一覧が確認できる。
https://my.freenom.com/clientarea.php?action=domains
CloudFlareでワイルドカードDNSの登録
FreenomでもDNSサービスは提供しているのですが、CloudFlareのほうが操作性がよくワイルドカードDNSが利用できるのでこちらを使うことにします。
www.cloudflare.com
右上のAdd Siteからドメインを追加画面に遷移

一番左の無料のやつを選択

いったんそのままContinue

nameserverを変えろと言われる。

freenomに行って指示通りにNameserverを変更する

Cloudflareにて反映されるのを待つ

ページを行ったり来たりしていると数分で反映された

いまこのドメインにアクセスすると下記のようになる。
これは名前からサーバまではいけるがそのサーバの80番が開いていないということのようだ。
登録したIPが間違っていたかな?

nghttpx-ingress-controllerがデプロイされているホストをを調べる

worker01にデプロイされているので、そのIPに設定する(masterのIPを指定していました;)
(通常のPodは10.x.xのようなクラスタ内IPが付与されますがnghttpx-ingress-controllerは.spec.hostNetwork=trueとなっているためホストのIPとなっています my-vps-kubernetes/rc-default.yaml at master · inajob/my-vps-kubernetes · GitHub )

アクセスできた! この"default backend -404" というのはKubernetes上のサービスから返却しているものです。

図にするとこんな感じ

$ kubectl get pods -n kube-system NAME READY STATUS RESTARTS AGE default-http-backend-55c6c69b88-vlqcx 1/1 Running 0 1h <--- これです etcd-kubernetes 1/1 Running 0 1h kube-apiserver-kubernetes 1/1 Running 0 1h kube-controller-manager-kubernetes 1/1 Running 0 1h kube-dns-6f4fd4bdf-c2995 3/3 Running 0 1h kube-proxy-622sq 1/1 Running 0 1h kube-proxy-j5754 1/1 Running 0 1h kube-scheduler-kubernetes 1/1 Running 0 1h monitoring-grafana-8dd9cb57f-4ms82 1/1 Running 0 1h nghttpx-ingress-controller-78749dc54-8wlxr 1/1 Running 0 29m node-exporter-5294m 1/1 Running 0 1h prometheus-8694d8cdd8-vmw7h 1/1 Running 0 1h weave-net-r5jft 2/2 Running 0 1h weave-net-wm7sn 2/2 Running 0 1h
Ingressを試す
ドメインの取得、DNSサーバへの登録が終わり、無事取得したドメインでKubernetesクラスタまで到達できることが確認できました。 次はIngressを試します。
Ingressを利用するとVirtualHostのようにHostヘッダの値で違うServiceにアクセスさせることができます。
nginxをデプロイして、Serviceも作成します。
$ kubectl run nginx --image=nginx deployment "nginx" created $ kubectl expose deployment nginx --port=80 service "nginx" exposed
Ingressはコマンドでは作れないので下記のようなテキストファイルを用意します
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: nginx-ingress
spec:
rules:
- host: nginx.inajob-test.tk
http:
paths:
- path: /
backend:
serviceName: nginx
servicePort: 80
上記をKubernetesにデプロイします。
$ kubectl apply -f nginx-ingress.yaml ingress "nginx-ingress" created
cloudflareにAレコードを追加します

やった!アクセスできました。

新しいサブドメインのIngressを用意するたびにcloudflareにAレコードを追加するのが面倒なのでワイルドカードのドメインを追加してみます。
丸で囲ったところに注意です。CloudFlareではCloudFlareを経由しキャッシュを返したり、SSL化したりするような機能がありますが、ワイルドカードドメインの場合はそれが使えないので明示的にOFFにしています。


これであとはIngressを用意するだけでサブドメインが増えていくようになります。
まとめ
ここまでできると月$10のクラスタでもそこそこつかえるKubernetesが構築できたのではないかと思います。
ということで、vultrでサーバを作りましょう! (この記事が役立った!という人はぜひこちらのリンクからお願いします。)