使用 kubectl 連接到遠端 minikube 集群

使用 kubectl 連接到遠端 minikube 集群

我想看看是否可以使用本地(Mac)kubectl 連接到遠端 minikube 叢集(Ubuntu 盒子)。我目前使用 Docker,並且可以使用docker-machine.只需 eval 到機器名稱,docker 就會使用遠端機器。

我想知道 minikube/kubectl 有沒有類似的東西?我發現一些文章提到我需要將遠端~/.minikube目錄複製到本地,並更改一些配置。但這對於像這樣的工具docker-machine無縫完成的事情來說似乎相當複雜。

是否有類似的工具可用,或者如果沒有,有人可以幫助我完成連接到遠端叢集所需的步驟嗎?

遠端機器 目前我使用該docker驅動程式(這是命令的完整輸出,只有一行):

$ 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 叢集的步驟:

  1. 建立一個監聽公共介面的 minikube 集群,將遠端主機名稱和/或 IP 位址新增至產生的憑證中 minikube start --listen-address=0.0.0.0 --apiserver-names=example.com --apiserver-ips=1.2.3.4
  2. 用於docker ps獲取 API 伺服器的公共連接埠 - 它應該代理到 minikube 容器內的 8443 連接埠(它看起來像0.0.0.0:32774->8443/tcp- 連接埠是 32774)
  3. 取得 minikube 使用的 kube 配置minikube kubectl -- config view並將其儲存到本機檔案(例如~/minikube.config
  4. 中的編輯clusters[0].cluster.server欄位~/minikube.config- 將其設定為步驟 2 中獲得的適當遠端主機和連接埠
  5. 為憑證和金鑰建立本機目錄:mkdir -p ~/.minikube/profiles/minikube
  6. 複製client.keyclient.crtca.crt從 minikube 主機複製到本機: scp 'example.com:.minikube/profiles/minikube/client.*' ~/.minikube/profiles/minikube/以及scp 'example.com:.minikube/ca.crt' ~/.minikube/
  7. 在本地運行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

相關內容