ローカル (Mac) kubectl を使用してリモートの minikube クラスター (Ubuntu ボックス) に接続できるかどうかを確認したいと考えています。現在 Docker を使用しており、 を使用してこれを簡単に実行できますdocker-machine
。マシン名を eval するだけで、docker はリモート マシンを使用します。
minikube/kubectl にも同様のものがあるかと思いました。リモート ディレクトリをローカルにコピーして、いくつかの設定を変更する必要があると記載されている記事をいくつか見つけました~/.minikube
。しかし、これは、ツールがdocker-machine
シームレスに実行するものとしてはかなり複雑に思えます。
同様のツールはありますか? ない場合は、リモート クラスターに接続するために必要な手順について誰かが助けてくれますか?
リモートマシン
現在、私はdocker
ドライバーを使用しています (これはコマンドの完全な出力であり、1 行のみです)。
$ minikube config view
- driver: docker
数多くのNodePort
サービスがあります:
$ kubectl get service -A
NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
default apigateway NodePort 10.100.122.255 <none> 8080:30601/TCP 19h
default discoveryserver NodePort 10.101.106.231 <none> 8761:30602/TCP 19h
default elasticsearch NodePort 10.97.197.14 <none> 9200:30604/TCP 19h
default harness NodePort 10.97.233.245 <none> 9090:30603/TCP 19h
default kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 19h
default mongo NodePort 10.97.172.108 <none> 27017:32625/TCP 19h
kube-system kube-dns ClusterIP 10.96.0.10 <none> 53/UDP,53/TCP,9153/TCP 19h
$ kubectl config view
apiVersion: v1
clusters:
- cluster:
certificate-authority: /home/meanwhileinhell/.minikube/ca.crt
server: https://192.168.50.2:8443 <<<<<< `minikube ip`
name: minikube
contexts:
- context:
cluster: minikube
namespace: default
user: minikube
name: minikube
current-context: minikube
kind: Config
preferences: {}
users:
- name: minikube
user:
client-certificate: /home/meanwhileinhell/.minikube/profiles/minikube/client.crt
client-key: /home/meanwhileinhell/.minikube/profiles/minikube/client.key
ローカルマシン
$ kubectl config view
apiVersion: v1
clusters:
- cluster:
certificate-authority-data: DATA+OMITTED
server: https://kubernetes.docker.internal:6443
name: docker-desktop
- cluster:
certificate-authority: /Users/mih.mac/remote/.minikube/ca.crt
server: https://192.168.1.5:8443 <<<<<< Static IP of my remote machine
name: minikube
contexts:
- context:
cluster: docker-desktop
user: docker-desktop
name: docker-desktop
- context:
cluster: minikube
user: minikube
name: minikube
current-context: docker-desktop
kind: Config
preferences: {}
users:
- name: docker-desktop
user:
client-certificate-data: REDACTED
client-key-data: REDACTED
- name: minikube
user:
client-certificate: /Users/mih.mac/remote/.minikube/client.crt
client-key: /Users/mih.mac/remote/.minikube/client.key
答え1
利用できるツールはありません。 minikube にリモートでアクセスするには、SSH トンネリングを実行します。
1- Mac から Ubuntu ボックスに SSH 接続できる必要があります。
2-適切なSSHポート転送フラグを追加します。次のコマンドを実行します。
ssh -N -p 22 <user>@<public_ip> -L 127.0.0.1:18443:<minikube_ip>:8443
どこ:
ユーザーはあなたの名前です
public_ipはサーバーのパブリックIPです
minikube_ip は minikube の IP アドレスです。これは、コマンド minikube ip を使用してサーバー上で見つけることができます。おそらく 192.168.49.2 になります。
3- 次に、適切な K8s 資格情報を Mac 上の kubectl に入力します。
詳細については、次のリンクを参照してください。
https://www.zepworks.com/posts/access-minikube-remotely-kvm/ https://www.chevdor.com/post/2021/02/docker_to_k8s/
答え2
kubectl からリモート minikube クラスターに接続する手順:
- パブリックインターフェースでリッスンする minikube クラスターを作成し、生成された証明書にリモートホスト名や IP アドレスを追加します。
minikube start --listen-address=0.0.0.0 --apiserver-names=example.com --apiserver-ips=1.2.3.4
docker ps
API サーバーのパブリック ポートを取得するために使用します。minikube コンテナー内の 8443 ポートにプロキシする必要があります (次のようになります0.0.0.0:32774->8443/tcp
- ポートは 32774 です)- minikube の kube 構成を取得し
minikube kubectl -- config view
、ローカル ファイルに保存します (例~/minikube.config
) - 編集
clusters[0].cluster.server
フィールド~/minikube.config
- 手順2で取得した適切なリモートホストとポートに設定します - 証明書とキー用のローカル ディレクトリを作成します。
mkdir -p ~/.minikube/profiles/minikube
client.key
をminikubeホストからローカルホストに コピーしclient.crt
ます。ca.crt
scp 'example.com:.minikube/profiles/minikube/client.*' ~/.minikube/profiles/minikube/
scp 'example.com:.minikube/ca.crt' ~/.minikube/
- ローカルで実行
kubectl --kubeconfig ~/minikube.config get pod -A
して動作するか確認する
答え3
socat を使用して、minikube のデフォルト IP とポート (192.168.49.2:8443) をシステムのデフォルト ネットワーク カード IP に転送できます。
socat TCP4-LISTEN:8443,fork TCP4:192.168.49.2:8443