首页 > 解决方案 > Minikube - 外部 IP 与主机的公共 IP 不匹配

问题描述

很快,我使用了 GOOGLE COMPUTE ENGINE(外部 IP:34.73.89.55,所有端口和协议都打开),然后我安装了 Docker、minikube、kubectl。然后:

minikube start --driver=docker

minikube tunnel

kubectl create deployment hello-minikube1 --image=k8s.gcr.io/echoserver:1.4

kubectl expose deployment hello-minikube1 --type=LoadBalancer --port=8080

kubectl get svc

我得到:

NAME              TYPE           CLUSTER-IP       EXTERNAL-IP      PORT(S)          AGE

hello-minikube1   LoadBalancer   10.110.130.109   10.110.130.109   8080:31993/TCP   9m22s

我的问题是,为什么 EXTERNAL-IP 与主机的外部 IP 不匹配:34.73.89.55?如何通过主机的外部IP远程访问该服务(例如:我在家并通过浏览器访问)?

ps:我想用GOOGLE COMPUTE ENGINE。

编辑:我也尝试:

 sudo minikube start --driver=none

 sudo kubectl create deployment hello-minikube1 --image=k8s.gcr.io/echoserver:1.4

 sudo kubectl expose deployment hello-minikube1 --type=NodePort --port=8080

 wget 127.0.0.1:8080

=>不工作

标签: localminikube

解决方案


默认情况下,minikube 期望在单独的 VM 中运行。这可以通过显式指定驱动程序来更改。

  1. Why the EXTERNAL-IP did not match with the host's external IP?

因为 minikube 使用隧道创建到使用 LoadBalancer 类型部署的服务的路由,并将它们的 Ingress 设置为它们的 ClusterIP。有关详细示例,请参阅此文档

  1. How can I access this service remotely by the host's external IP?

我在这里看到两个选项:

  • 更推荐:套装--driver=none

Minikube 还支持--driver=none在主机上而不是在 VM 中运行 Kubernetes 组件的选项。使用此驱动程序需要 Docker 和 Linux 环境,但不需要管理程序。

  • 可能不太理想:使用端口转发(使用 iptables 或代理)。这可能不太理想。

还要记住 minikube 是为了在 locahost 上进行测试而创建的。使用它时请记住这一点。

编辑:

去的时候--driver=none你可以:

  • 使用 NodePort 类型而不是 LoadBalancer。

  • 通过添加以下内容继续使用负载均衡器和修改后的服务:

spec: externalIPs: - <host_address>

例如:

apiVersion: v1
kind: Service
metadata:
 creationTimestamp: null
 labels:
   app: hello-minikube1
 name: hello-minikube1
spec:
 externalIPs:
 - <host_address>
 ports:
 - port: 8080
   protocol: TCP
   targetPort: 8080
 selector:
   app: hello-minikube1
 type: LoadBalancer
status:
 loadBalancer: {}

以上经过测试,导致外部 IP = 主机 IP。

请让我知道这是否有帮助。


推荐阅读