很快,我使用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
=>不起作用
答案 0 :(得分:2)
默认情况下,minikube期望在单独的VM中运行。可以通过显式指定驱动程序来更改。
Why the EXTERNAL-IP did not match with the host's external IP?
因为minikube使用隧道来创建到使用LoadBalancer类型部署的服务的路由,并将其Ingress设置为其ClusterIP。为一个 详细示例,请参见this documentation。
How can I access this service remotely by the host's external IP?
我在这里看到两个选项:
--driver=none
Minikube还支持运行
--driver=none
Kubernetes组件位于主机上而不是VM中。使用此驱动程序 需要Docker和Linux环境,但不需要管理程序。
还请记住,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。
请告诉我是否有帮助。