我已经创建了一项名为 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应用程序:
请注意,我使用的是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 。
你能帮我吗?预先感谢您的回答。
答案 0 :(得分:2)
minikube
可以使用许多不同的虚拟机管理程序。选择一个将高度依赖于像操作系统这样的变量。其中一些是:
--vm-driver=none
)”(请参见引号)有官方文档在谈论它: Kubernetes.io: Minikube: Specifying the vm driver
选择Hypervisor
将影响minikube
的行为。
关注于:
--vm-driver=none
--vm-driver=virtualbox
官方文档进行了总结:
Minikube还支持
--vm-driver=none
选项,该选项在主机而不是VM中运行Kubernetes组件。使用此驱动程序需要Docker和Linux环境,但不需要管理程序。
命令$ 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
使用minikube
创建一个--vm-driver=virtualbox
实例将创建一个以Virtualbox为主机的虚拟机。
使用这种--vm-driver
创建的虚拟机将具有下面提供的2个网络接口:
重要的是,仅主机适配器可以访问您的minikube实例。
仅主机网络。此网络可用于创建包含主机和一组虚拟机的网络,而无需主机的物理网络接口。而是在主机上创建类似于环回接口的虚拟网络接口,以提供虚拟机和主机之间的连接。
例如:
192.168.99.103
192.168.99.1
它们必须不同!
如果您在连接到此适配器时遇到问题,请检查:
ping
成功完成时minikube的仅主机适配器地址正在响应minikube start
。 ip a
ifconfig
根据我的经验,如果出现问题,重新启动/创建此适配器始终有效。
命令$ 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-IP
和ip address
。
服务对象类型NodePort
将可用于:
IP_ADDRESS_OF_HOST_ONLY_ADAPTER:NODEPORT_PORT
。
我重新创建了与之连接的Deployment
和Service
,它在--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