Minikube-外部IP与主机的公共IP不匹配

时间:2020-05-25 09:47:23

标签: local minikube

很快,我使用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

=>不起作用

1 个答案:

答案 0 :(得分:2)

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

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

因为minikube使用隧道来创建到使用LoadBalancer类型部署的服务的路由,并将其Ingress设置为其ClusterIP。为一个 详细示例,请参见this documentation

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

我在这里看到两个选项:

  • 更多建议:设置--driver=none

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

  • 可能不那么理想:使用port forwarding(使用iptables或proxy)。这可能不太理想。

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

编辑:

--driver=none时,您可以:

  • 使用NodePort类型代替LoadBalancer。

  • 通过添加以下内容继续将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: {}

以上内容经过测试,得出EXTERNAL IP = HOST IP。

请告诉我是否有帮助。