我的最终目标是能够从另一台主机访问在我的主机上运行的公开的 Kubernetes 服务。
我正在 minikube 中进行开发,并尝试使用 Ingress 控制器。我能够按照此处的说明在设备本身上运行它在 minikube 上设置入口但是,我希望能够从另一台计算机访问我公开的服务,例如
curl http://host.ip:8000
,其中 host.ip 是设备的实际公共 IP 地址,而不是 minikube VM 的 IP 地址或在设备上创建的内部网络的 IP 地址;而 port8000
是公开的 Kubernetes 服务的端口。
这似乎不是一个奇怪的边缘情况,所以我很惊讶我没有找到任何有用的信息来了解如何****轻松****地做到这一点。
这是我的当地的正常运行的入口控制器,为了完整性:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: nlp-adapt
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
backend:
serviceName: default-http-backend
servicePort: 8000
rules:
- host: myminikube.info
http:
paths:
- path: /
backend:
serviceName: echoserver
servicePort: 8080
- host: test.nlp
http:
paths:
- path: /nlptab
backend:
serviceName: nlptab
servicePort: 8000
答案1
通常,Minikube 在虚拟机内运行。除了将端口暴露在 Kubernetes 之外,还需要将端口暴露在虚拟机之外,以使应用程序在主机 IP 上可用。
以下是示例:
在 Kubernetes 之外公开 Ingress:
kind: Service apiVersion: v1 metadata: name: ingress-nginx spec: type: NodePort selector: app: ingress-nginx ports: - port: 80 nodePort: 31080 name: http
将端口暴露
31080
到虚拟机外部:ssh -i ~/.minikube/machines/minikube/id_rsa docker@$(minikube ip) -L 31080:0.0.0.0:8000
此后,Ingress 分享的应用程序将在http://host.ip:8000
它并不是公开应用程序的唯一方法。例如,当使用 VirtualBox 作为虚拟机管理程序时,您还可以使用 VirtualBox NAT 端口转发功能允许从外部访问通过 NodePort 公开的服务。如在关联由@horcle_buzz 提供