我想看看是否可以使用本地 (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 集群的步骤:
- 创建一个在公共接口上监听的 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
,client.crt
并ca.crt
从 minikube 主机复制到本地主机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