Minikube - 外部 IP 与主机的 public IP 不匹配
Minikube - External IP not match host's public 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
=>无效
默认情况下,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 also supports a --driver=none
option that runs the
Kubernetes components on the host and not in a VM. Using this driver
requires Docker and a Linux environment but not a hypervisor.
- 可能不太理想:使用 port forwarding(使用 iptables 或代理)。这可能不太理想。
另请记住,创建 minikube 是为了在本地主机上进行测试。使用它时请记住这一点。
编辑:
去 --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: {}
以上经过测试,结果为 EXTERNAL IP = HOST 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
=>无效
默认情况下,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 also supports a
--driver=none
option that runs the Kubernetes components on the host and not in a VM. Using this driver requires Docker and a Linux environment but not a hypervisor.
- 可能不太理想:使用 port forwarding(使用 iptables 或代理)。这可能不太理想。
另请记住,创建 minikube 是为了在本地主机上进行测试。使用它时请记住这一点。
编辑:
去 --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: {}
以上经过测试,结果为 EXTERNAL IP = HOST IP。
如果有帮助,请告诉我。