如何连接到另一台机器上的docker桌面的k8s集群?

时间:2020-04-04 13:45:13

标签: kubernetes docker-desktop

我在同一台wifi上有一台Macbook(192.168.1.101)和一台Macmini(192.168.1.104)。

我通过Macmini上的docker-desktop启动了一个k8s集群,并希望通过Macbook上的kubectl对其进行访问。

这是我在Macmini上的~/.kube/config的样子:

apiVersion: v1
clusters:
- cluster:
    certificate-authority-data: ******
    server: https://kubernetes.docker.internal:6443
  name: docker-desktop
contexts:
- context:
    cluster: docker-desktop
    user: docker-desktop
  name: docker-desktop
- context:
    cluster: docker-desktop
    user: docker-desktop
  name: docker-for-desktop
current-context: docker-desktop
kind: Config
preferences: {}
users:
- name: docker-desktop
  user:
    client-certificate-data: ******
    client-key-data: ******

如何在Macbook上写~/.kube/config?目前,我遵循官方doc并出现以下错误。

$ kubectl config view
apiVersion: v1
clusters:
- cluster:
    certificate-authority-data: DATA+OMITTED
    server: http://192.168.1.104:6443
  name: macmini-cluster
contexts:
- context:
    cluster: macmini-cluster
    user: macmini-user
  name: macmini-context
current-context: macmini-context
kind: Config
preferences: {}
users:
- name: macmini-user
  user:
    client-certificate-data: REDACTED
    client-key-data: REDACTED
$ kubectl get pods
The connection to the server 192.168.1.104 was refused - did you specify the right host or port?

更新

我在6443的{​​{1}}上添加了端口server,并尝试cluster到Macmini的端口telnet,但是得到了:

6443

当我检查Macmini时:

$ telnet 192.168.1.104 6443
Trying 192.168.1.104...
telnet: connect to address 192.168.1.104: Connection refused
telnet: Unable to connect to remote host

似乎有一个尚未解决的相关issue

4 个答案:

答案 0 :(得分:1)

您只需将.kube / config文件从mac-mini桌面复制到macbook,如果要使用相同的上下文,则无需再次写入配置文件。

答案 1 :(得分:0)

在Macbook中,必须按以下指定端口号。那是K8S APIServer的端口号。 (1

服务器:http://192.168.1.104:6443

答案 2 :(得分:0)

您的kubernetes api服务器似乎没有绑定到本地可访问的ipv4,但绑定到主机的127.0.0.1

$ netstat -na | grep 6443 tcp4 0 0 127.0.0.1.6443

这意味着无法在同一网络中访问该事件。

您需要将此端口代理到本地ipv4网络ip。您可以使用管理员身份在kubernetes主机中运行的命令提示符执行以下操作:

etsh interface portproxy add v4tov4 listenaddress=192.168.1.104 listenport=6443 connectaddress=127.0.0.1 connectport=6443

答案 3 :(得分:0)

有一个内部主机名 ./recursiveUnzip.sh "$WORKSPACE" 指向 kubernetes docker-desktop,但是,该主机名可以被任何内部容器访问,无需 api-server 选项,我们可以在下面给出一个 hack做一个--link把戏

<块引用>

docker run -d -p 0.0.0.0:6444:6443 bobrik/socat TCP-LISTEN:6443,fork TCP:docker-desktop:6443

我曾经想过利用 kubernetes port-forwarding,但没有时间继续挖掘,希望其他人对这个技巧有任何想法。

除此之外,不要忘记对下面的 service 进行一些更改以避免 x509 证书验证

~/.kube/config
相关问题