minikube ip无法访问

时间:2020-03-16 17:02:20

标签: kubernetes kubectl minikube

我已经创建了一项名为 fleetman-webapp 的服务:

apiVersion: v1
kind: Service
metadata:
 name: fleetman-webapp

spec:
 selector:
  app: webapp

 ports:
  - name: http
    port: 80
    nodePort: 30080

 type: NodePort

还有一个名为 webapp 的pod:

apiVersion: v1
kind: Pod
metadata:
 name: webapp
 labels:
  app: webapp
spec:
 containers:
 - name: webapp
   image: richardchesterwood/k8s-fleetman-webapp-angular:release0

我已经检查了 minikube ip

192.168.99.102

但是当我在浏览器中输入 192.168.99.102:30080 时,无法访问该Web应用程序:enter image description here

请注意,我使用的是Ubuntu最新版本。我进一步验证了代理和防火墙是否处于活动状态:

猫/ etc /环境

PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"

iptables -L

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy DROP)
target     prot opt source               destination         
DOCKER-USER  all  --  anywhere             anywhere            
DOCKER-ISOLATION-STAGE-1  all  --  anywhere             anywhere            
ACCEPT     all  --  anywhere             anywhere             ctstate RELATED,ESTABLISHED
DOCKER     all  --  anywhere             anywhere            
ACCEPT     all  --  anywhere             anywhere            
ACCEPT     all  --  anywhere             anywhere            

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

Chain DOCKER (1 references)
target     prot opt source               destination         

Chain DOCKER-ISOLATION-STAGE-1 (1 references)
target     prot opt source               destination         
DOCKER-ISOLATION-STAGE-2  all  --  anywhere             anywhere            
RETURN     all  --  anywhere             anywhere            

Chain DOCKER-ISOLATION-STAGE-2 (1 references)
target     prot opt source               destination         
DROP       all  --  anywhere             anywhere            
RETURN     all  --  anywhere             anywhere            

Chain DOCKER-USER (1 references)
target     prot opt source               destination         
RETURN     all  --  anywhere             anywhere 

我也已在Ubuntu中禁用 ufw ,但没有成功,网址为 192.168.99.102:30080

你能帮我吗?预先感谢您的回答。

3 个答案:

答案 0 :(得分:2)

minikube可以使用许多不同的虚拟机管理程序。选择一个将高度依赖于像操作系统这样的变量。其中一些是:

  • Virtualbox
  • Hyper-V
  • VMware Fusion
  • KVM2
  • Hyperkit
  • “ Docker(--vm-driver=none)”(请参见引号)

有官方文档在谈论它: Kubernetes.io: Minikube: Specifying the vm driver

选择Hypervisor将影响minikube的行为。

关注于:

  • Docker:--vm-driver=none
  • Virtualbox:--vm-driver=virtualbox

Docker

官方文档进行了总结:

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

- Kubernetes.io: Install minikube: Install a hypervisor

命令$ sudo minikube ip的输出将显示主机的IP地址

NodePort将提供服务对象类型IP_ADDRESS_OF_HOST:NODEPORT_PORT

以下命令:$ kubectl get nodes -o wide

NAME STATUS ROLES  AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
K8S  Ready  master 95s v1.17.3 192.168.0.114 <none>  Ubuntu 18.04.4 LTS 5.3.0-28-generic docker://19.3.8

请具体看一下:

INTERNAL-IP
192.168.0.114

与正在使用的主机的IP地址相同。您可以(例如)curl个窗格,没有任何限制。请考虑阅读以下引用的文章:

警告:none VM驱动程序会导致安全和数据丢失问题。使用--vm-driver=none之前,请先咨询this documentation以获取更多信息。

您可以检查命令公开了什么: $ sudo netstat -tulpn

Virtualbox

使用minikube创建一个--vm-driver=virtualbox实例将创建一个以Virtualbox为主机的虚拟机。

使用这种--vm-driver创建的虚拟机将具有下面提供的2个网络接口:

  • NAT
  • 仅主机适配器

重要的是,仅主机适配器可以访问您的minikube实例。

仅主机网络。此网络可用于创建包含主机和一组虚拟机的网络,而无需主机的物理网络接口。而是在主机上创建类似于环回接口的虚拟网络接口,以提供虚拟机和主机之间的连接。

- Virtualbox.org: Virtual networking

例如:

  • minikube仅限主机的适配器将具有一个地址:192.168.99.103
  • 您的仅主机适配器将具有一个地址:192.168.99.1

它们必须不同!

如果您在连接到此适配器时遇到问题,请检查:

  • 如果ping成功完成时minikube的仅主机适配器地址正在响应minikube start
  • 通过发出以下命令之一,您的网络配置中就会出现
  • 您的仅主机适配器:
    • ip a
    • ifconfig
  • 您的仅主机适配器地址在您的minikube实例(子网)范围内

根据我的经验,如果出现问题,重新启动/创建此适配器始终有效。

命令$ sudo minikube ip的输出将显示仅主机适配器的IP地址。

以下命令:$ kubectl get nodes -o wide

NAME   STATUS   ROLES    AGE   VERSION   INTERNAL-IP      EXTERNAL-IP   OS-IMAGE              KERNEL-VERSION   CONTAINER-RUNTIME
m01    Ready    master   29m   v1.17.3   192.168.99.103   <none>        Buildroot 2019.02.9   4.19.94          docker://19.3.6

请再次仔细查看与之关联的INTERNAL-IPip address

服务对象类型NodePort将可用于: IP_ADDRESS_OF_HOST_ONLY_ADAPTER:NODEPORT_PORT

我重新创建了与之连接的DeploymentService,它在--vm-driver=none--vm-driver=virtualbox的情况下均有效。

如果您对此主题有任何疑问,请告诉我。

答案 1 :(得分:1)

对于这个关于 Kubernetes on Udemy from Richard Chesterwood 的特定(而且非常棒)的课程,以下解决方案应该在 Windows 上开箱即用:只需使用 minikube 驱动程序启动 hyper-v,然后它会自动将您期望的所有端口映射到主机上,就像 Dawid Kruk 在这里详细解释的那样。因此,您“正确”启动 minikube 所需的只是以下命令:

minikube start --driver=hyperv

请谨慎指定您为此 minikube 实例提供的确切内存量。根据我的经验,hyper-v 对你会给它多少内存有点敏感,什么可能会导致错误:

minikube start --driver=hyperv --memory=8192
...
Not enough memory in the system to start the virtual machine minikube.
Could not initialize memory: Not enough memory resources are available to complete this operation. (0x8007000E).
'minikube' failed to start. (Virtual machine ID D4BC7B61-4E4D-4079-94DE-...)
Not enough memory in the system to start the virtual machine minikube with ram size 8192 megabytes. (Virtual machine ID ...)

因此,只需使用上面给出的非特定命令,hyper-v 就会自行计算出它真正需要多少内存。

答案 2 :(得分:0)

即使您通过minikube中的NodePort公开端口30080,minikube仍不会公开它,因为它将使用自己的外部端口来监听此服务。 Minikube将服务隧道化以暴露给外部世界。要找出该暴露的端口,请执行以下操作:

minikube service $SERVICE_NAME

所以,就您而言

minikube service fleetman-webapp
相关问题