使用主机名/IP 地址访问 kubernetes 服务

使用主机名/IP 地址访问 kubernetes 服务

我的最终目标是能够从另一台主机访问在我的主机上运行的公开的 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 上可用。

以下是示例:

  1. 在 Kubernetes 之外公开 Ingress:

    kind: Service
    apiVersion: v1
    metadata:
      name: ingress-nginx
    spec:
      type: NodePort
      selector:
        app: ingress-nginx
      ports:
        - port: 80
          nodePort: 31080
          name: http
    
  2. 将端口暴露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 提供

相关内容