使用 kubectl 连接到远程 minikube 集群

使用 kubectl 连接到远程 minikube 集群

我想看看是否可以使用本地 (Mac) kubectl 连接到远程 minikube 集群 (Ubuntu box)。我目前使用 Docker,可以使用 轻松完成此操作docker-machine。只需 eval 到机器名称,docker 就会使用远程机器。

我想知道 minikube/kubectl 是否有类似的东西?我发现一些文章提到我需要将远程~/.minikube目录复制到本地,并更改一些配置。但对于像 kubectl 这样的工具来说,这似乎相当复杂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 通过 SSH 连接到 Ubuntu 机器。

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

相关内容