4

我在我的 Mac 笔记本电脑上运行 minikube。我正在使用 VirtualBox 来托管 minikube 虚拟机,遵循官方说明

我想要一个要部署到集群中的 pod,以便能够 ping 将在我的笔记本电脑上运行的服务器。假设(现在)我没有定义 ExternalName 类型的 Kubernetes 服务来表示该服务器,我应该在我的 pod 中运行的程序中使用什么 IP 或主机名?

编辑:从我的 pod 我可以ping 10.0.2.2得到答案。然而,试图在我telnet碰巧有一个 H2 数据库运行的10.0.2.2端口9092上,只是挂起。

最后,minikube ssh这显然让我进入了 VirtualBox VM,也许吧?运行为docker?导致上述所有相同的行为,以防万一这很重要,这表明这基本上是一个关于 VirtualBox 的问题。

编辑#2:VirtualBox 的重新启动解决了连接问题(!)。尽管如此,10.0.2.2对我来说仍然像魔术一样;我想知道这个IP是从哪里来的。

4

1 回答 1

4

您应该能够使用下面列出的 ipv4 地址vboxnet0vboxnet0在 的输出列表中查找接口ifconfig。或者,地址10.0.2.2也将从访客映射回主机。

此 IP 地址将可从来宾内部访问,但不能直接从 pod 内部访问。要使其从 pod 中访问,您需要创建一个公开此 IP 地址的无头服务。
有关如何创建无头服务的信息,请参阅此答案: Minikube 将 MySQL 在 localhost 上作为服务公开

因此,例如,我在主机上的端口 :8000 上运行了一个服务器,并执行以下操作以在 pod 中访问它:

$ kubectl create -f service.yaml

----service.yaml----
apiVersion: v1 kind: Service metadata:
    name: my-service spec:
    ports:
        - protocol: TCP
          port: 1443
          targetPort: 8000

$ kubectl create -f endpoint.yaml

----endpoint.yaml----
apiVersion: v1
kind: Endpoints
metadata:
    name: my-service
subsets:
    - addresses:
        - ip: 192.168.99.1 #ipv4 address from vboxnet0
      ports:
        - port: 8000

$ kubectl get svc
NAME         CLUSTER-IP   EXTERNAL-IP   PORT(S)    AGE
kubernetes   10.0.0.1     <none>        443/TCP    2h
my-service   10.0.0.83    <none>        1443/TCP   17m

然后,您可以在 pod 中使用 10.0.0.83:1443 访问主机服务。

于 2017-04-20T21:31:54.130 回答