你好,我正在用minikube学习kubernetes。我可以在运行minikube的计算机上通过minikubeip:NodePort访问服务,现在我想从其他计算机通过LAN访问该服务。我尝试了Ingress,但对我没有用。
部署文件:
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: aspnetapp-deployment
labels:
app: aspnetapp
spec:
replicas: 2
selector:
matchLabels:
app: aspnetapp
template:
metadata:
labels:
app: aspnetapp
spec:
containers:
- name: aspnetapp-cn
image: localhost:5000/aspnetapp
ports:
- containerPort: 80
服务文件:
---
apiVersion: v1
kind: Service
metadata:
name: aspnetapp-service
spec:
type: NodePort
ports:
- name: http
targetport: 80
port: 80
protocol: TCP
selector:
app: aspnetapp
入口文件:
---
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: aspnetapp-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /$1
spec:
rules:
- host:
http:
paths:
- path: /aspnetapp
backend:
serviceName: aspnetapp-service
servicePort: 80
答案 0 :(得分:1)
要使用--docker
驱动程序通过Ubuntu将应用程序公开到LAN,可以使用:
$ kubectl port-forward ...
免责声明!
- 您的
$ kubectl port-forward
应该在运行minikube的主机上运行。- 以上命令将连续运行(
&
可用于在后台运行)
示例:
假设您有一台IP地址为192.168.0.115
的Ubuntu计算机。
我使用nginx
图片创建了一个示例:
Deployment.yaml
apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
kind: Deployment
metadata:
name: nginx
spec:
selector:
matchLabels:
app: nginx
replicas: 1
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
关于公开Deployment
的服务,您可以任一:
$ kubectl expose deployment nginx --port=80 --type=NodePort
apiVersion: v1
kind: Service
metadata:
name: nginx
spec:
type: NodePort
selector:
app: nginx
ports:
- protocol: TCP
port: 80
targetPort: 80
您可以通过两种方式公开nginx
:
$ kubectl port-forward
联系。Ingress
控制器。您可以通过以下方式直接暴露Service
,而无需使用Ingress
:
$ kubectl port-forward --address=0.0.0.0 deployment/nginx 10000:80
剖析以上命令:
--address=0.0.0.0
-在本地主机之外公开deployment/nginx
-资源/资源名称10000:80
-主机上的端口/ pod上的端口,用于将流量发送到分配1024以下的本地端口将需要root访问权限!
您将需要登录到root用户,然后将
.kube/config
复制到/root/
目录或指定kubectl
在哪里寻找配置!
运行上述命令后,您应该可以运行:
curl 192.168.1.115:10000
命令$ kubectl port-forward
将生成:
Forwarding from 0.0.0.0:10000 -> 80 # AT THE START
Handling connection for 10000 # CURL FROM 192.168.0.2
Ingress
控制器您需要运行
$ minikube addons enable ingress
才能具有Ingress
资源的功能
在您的示例中,您使用了Ingress
资源。在这种情况下,您应该:
Ingress
资源(与您一样)。apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ingress
spec:
rules:
- host:
http:
paths:
- path: /
backend:
serviceName: nginx
servicePort: 80
Ingress
控制器! Ingress
控制器在收到流量后会进一步将其转发(先到您的Service
,再到Pod
)
要将流量转发到您的Ingress
控制器,请运行以下命令:
kubectl port-forward --address=0.0.0.0 --namespace=kube-system deployment/ingress-nginx-controller 80:80
再次剖析以上命令:
--address=0.0.0.0
-在本地主机之外公开--namespace=kube-system
-Deployment
控制器的Ingress
所在的命名空间deployment/ingress-nginx-controller
-资源/资源名称80:80
-主机上的端口/ pod上的端口,用于将流量发送到命令$ kubectl port-forward
将生成:
Forwarding from 0.0.0.0:80 -> 80 # AT THE START
Handling connection for 80 # CURL FROM 192.168.0.2
我也建议您使用其他--driver
,例如Virtualbox。您无需使用$ kubectl port-forward
(NAT)就可以公开您的应用程序。
其他资源:
答案 1 :(得分:0)
入口选项似乎不起作用: kubectl port-forward --address=0.0.0.0 --namespace=kube-system deployment/ingress-nginx-controller 80:80
我收到以下错误: 错误:无法转发端口,因为 pod 未运行。当前状态=待定
minikube 版本是 v1.20.0 入口控制器版本为 v0.44.0
示例设置: 尝试从同一 LAN 中的另一台机器访问部署在 minikube 集群中的 Web 服务。在主机中,服务的访问方式类似于“http://express.api/users”。 'express.api' 使用主机文件中的条目解析为入口 IP 地址。