minikube ip 无法访问

Moh*_*tir 2 kubernetes kubectl minikube

我创建了一项名为flyman-webapp 的服务:

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

spec:
 selector:
  app: webapp

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

 type: NodePort
Run Code Online (Sandbox Code Playgroud)

还有一个名为webapp的 pod :

apiVersion: v1
kind: Pod
metadata:
 name: webapp
 labels:
  app: webapp
spec:
 containers:
 - name: webapp
   image: richardchesterwood/k8s-fleetman-webapp-angular:release0
Run Code Online (Sandbox Code Playgroud)

我检查了minikube ip

192.168.99.102

但是当我在浏览器中输入192.168.99.102:30080 时,webapp 无法访问:在此处输入图片说明

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

猫 /etc/environment

PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"
Run Code Online (Sandbox Code Playgroud)

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 
Run Code Online (Sandbox Code Playgroud)

我也在Ubuntu 中禁用了ufw,但没有成功,url 192.168.99.102:30080

你能帮我吗?提前感谢您的回答。

Ima*_*Bux 8

即使您通过 minikube 中的 NodePort 公开端口 30080,minikube 仍然不会公开它,因为它将使用自己的外部端口来侦听此服务。Minikube 通过隧道将服务暴露给外部世界。要找出暴露的端口:

minikube service $SERVICE_NAME
Run Code Online (Sandbox Code Playgroud)

所以,就你而言

minikube service fleetman-webapp
Run Code Online (Sandbox Code Playgroud)


Daw*_*ruk 6

有许多不同的虚拟机管理程序可以与minikube. 选择一种将高度依赖于操作系统等变量。他们之中有一些是:

  • 虚拟盒
  • 超V
  • VMware融合
  • KVM2
  • 超级套件
  • “Docker ( --vm-driver=none)”(参见引号)

有官方文档讨论它:Kubernetes.io:Minikube:指定虚拟机驱动程序

选择Hypervisor会影响minikube意志的行为方式。

专注于:

  • 码头工人:--vm-driver=none
  • 虚拟盒:--vm-driver=virtualbox

码头工人

官方文档总结如下:

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

-- Kubernetes.io:安装 minikube:安装虚拟机管理程序

命令的输出$ 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
Run Code Online (Sandbox Code Playgroud)

请具体查看:

INTERNAL-IP
192.168.0.114
Run Code Online (Sandbox Code Playgroud)

它与其正在运行的主机的 IP 地址相同。例如,您可以curl不受任何限制地使用 pod。请考虑阅读包含引用的文章:

注意: VM 驱动程序none可能会导致安全和数据丢失问题。使用之前--vm-driver=none,请参阅此文档以获取更多信息。

您可以使用命令检查暴露的内容: $ sudo netstat -tulpn

虚拟盒

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

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

  • 网络地址转换
  • 仅主机适配器

重要的是您的 minikube 实例将可以通过Host-only 适配器访问。

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

-- Virtualbox.org:虚拟网络

例如:

  • 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
Run Code Online (Sandbox Code Playgroud)

请再次仔细查看INTERNAL-IPip address与之相关。

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

我重新创建了你的Deployment并附Service加到它,它在两种--vm-driver=none情况下都有效--vm-driver=virtualbox

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