概要
前回は$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でサーバを作りましょう! (この記事が役立った!という人はぜひこちらのリンクからお願いします。)