不久,我使用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
Run Code Online (Sandbox Code Playgroud)
我得到:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
hello-minikube1 LoadBalancer 10.110.130.109 10.110.130.109 8080:31993/TCP 9m22s
Run Code Online (Sandbox Code Playgroud)
我的问题是,为什么 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
Run Code Online (Sandbox Code Playgroud)
=>不工作
默认情况下,minikube 期望在单独的虚拟机中运行。这可以通过显式指定驱动程序来更改。
Why the EXTERNAL-IP did not match with the host's external IP?因为 minikube 使用隧道创建一条通往使用 LoadBalancer 类型部署的服务的路由,并将其 Ingress 设置为其 ClusterIP。有关详细示例,请参阅此文档。
How can I access this service remotely by the host's external IP?我在这里看到两个选择:
--driver=none Minikube 还支持
--driver=none在主机上而不是在虚拟机中运行 Kubernetes 组件的选项。使用此驱动程序需要 Docker 和 Linux 环境,但不需要虚拟机管理程序。
另请记住,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: {}
Run Code Online (Sandbox Code Playgroud)
以上经过测试,得出EXTERNAL IP = HOST IP。
请告诉我这是否有帮助。
| 归档时间: |
|
| 查看次数: |
5896 次 |
| 最近记录: |