目次
背景
こんにちは。 かりんとうマニア(@karintozuki)です。
Minikubeを自宅のサーバーに建てています。勉強目的なので本家k8sより構築が楽なMinikubeを使ってます。
今回はローカルで使っているPCからkubectlでサーバー上のMinikubeを管理する方法を紹介します。
Minikubeが走っているマシンにSSHを繋げられるようになっていることが前提です。
サーバーから.kube/configを取得
サーバー上でMinikubeが問題なく動いているなら、~/.kube/config
ファイルが設定されているはずです。
これはサーバー上のkubectlがMinikubeに接続する際の情報です。(たしか、Minikubeをインストールする際に自動的に設定されているはずです。)
ローカルのKubectlからMinikubeへの接続を設定する際に参考にするので、このファイルをローカルマシンにコピーしてきてください。
こんな中身になっていると思います。
1 | apiVersion: v1 |
認証ファイルのコピー
先ほどのconfigファイルにclient.key
, client.crt
, ca.crt
というファイルのパスが記載されているのが分かるでしょうか。これらはkubectlがMinikubeに接続する際に認証で使うファイルです。
この3種類のファイルをサーバーからローカルにコピーしてきます。
私はkube/minikube-remote
というフォルダに配置しました。これはローカルマシンの中のどこにあっても問題ないです。
1 | ~/.kube/minikube-remote |
ローカルの.kube/configの編集
今度はローカルにある.kube/configに、サーバー上のMinikubeにつなぐ設定を足していきます。
リモートからコピーしてきた.kube/config
をローカルで編集していきます。
まずは先ほどの三つの認証ファイルのパスをローカルのパスに直します。
また、cluster.serverをhttps://localhost:8443
に変更します。(ポートはなんでもいいです。)
私の場合はローカルのPCにもMinikubeが入っているので、名前が被らないようにminikube-remoteと名前も変えています。
編集後のファイルはこんな感じです。
1 | - cluster: |
あとはこのYamlを既存の.kube/configに足していくだけです。すでにローカルでkubectlを使っていれば、ほかのClusterの設定があると思うので、cluster
, context
, name
のセクションにそれぞれコピーしていってください。
私は手動でマージしたのですが、もっといい方法があるかもです。
SSHトンネルを開く
もう一つやることがあります。先ほど、cluster.serverをhttps://localhost:8443
に変更しましたが、これはSSHでポートフォーワーディングをすることで8443
ポートをサーバー上のMinikubeのKubernetes APIのポートに繋いでいきます。
リモートの.kube/config
のcluster.serverを見てください。
server: https://192.168.49.2:8443
このアドレスはリモートサーバー内からのみアクセス可能なKubernetes APIのアドレスです。
Minikubeはこれを<サーバーのアドレス>:<ポート番号>のかたちでアクセスできるようにDockerのポートを設定しています。
リモートマシンの中でdocker ps
を実行して、Minikubeのportを見てみてください。
127.0.0.1:32772->22/tcp, 127.0.0.1:32771->2376/tcp, 127.0.0.1:32770->5000/tcp, 127.0.0.1:32769->8443/tcp
いくつかポートの設定がありますが、Kubernetes APIの8443
は32769
にマッピングされているようです。ポート開けるのに抵抗がないよって人は直接この32769ポートを開けてしまってもいいと思います。
私はローカルマシンからポートフォワーディングを使ってトンネルで繋げるようにしました。ssh -L 8443:localhost:32769 <リモートのアドレス>@user
こうすることでローカルマシンのhttps://localhost:8443
がリモートマシンのhttps://192.168.49.2:8443
につながりました。
疎通確認
以下のコマンドで接続を試してみます。
1 | kubectl config use-context minikube-remote // contextを入れ替える |
無事にMinikubeにつながったようです。
まとめ
今回はサーバー上のMinikubeにローカルのKubectlからアクセスしました。
おそらくきちんとやるならローカルマシン用に別の認証ファイルを生成するのですが、とりあえず簡単に繋ぐ方法を紹介しました。
それじゃ今日はこの辺で。
関連記事
こちらの記事もおすすめです。
PR
自分のサーバーが欲しいとき、ドメインが欲しいときお名前.comで!