首页 > 解决方案 > 无法从 K8s 集群访问节点应用程序

问题描述

我已经将一个非常简单的节点应用程序部署到了 minikube 集群。我创建了 docker 映像,并且在容器中一切正常。当我在 k8s 集群中构建它时,我可以看到部署正在运行。

我正在尝试使用运行“kubectl get svc”时提供的 minikube IP 和端口通过负载均衡器访问节点应用程序。我知道我做这部分至少是正确的......

当我尝试访问 URL 并检查网络选项卡时,请求永远不会完成,只是保持等待状态。

节点应用程序是一个非常简单的 API,我只是为了测试而制作的,所以我在尝试访问应用程序时使用路由 /posts。它应该返回一些 JSON,这一切都在容器中工作。这一切都只是在集群中停止工作。


apiVersion: apps/v1
kind: Deployment
metadata: 
  name: server-deployment
spec: 
  replicas: 3
  selector: 
    matchLabels: 
      targets: nodes
  template: 
    metadata: 
      labels: 
        targets: nodes
    spec: 
      containers: 
        - name: server
          image: brandonjones085/mean-backend
          ports: 
            - containerPort: 3000

---
apiVersion: v1
kind: Service
metadata:
  name: backend-load
spec:
  selector:
  
    targets: nodes
  ports:
  - protocol: "TCP"
    port: 3000
    targetPort: 3000
  type: LoadBalancer

标签: node.jsapikubernetes

解决方案


就像@Hackerman 描述的那样,如果您使用LoadBalancer类型的服务,您需要使用minikube tunnel. 您可以按照示例进行操作。此类服务通常用于预置提供程序负载均衡器,例如AWS ELB。但在 minikube 的情况下,没有外部提供者,你需要欺骗它,让它认为有一个。

基本上,您需要在创建部署之前运行它。

在单独的终端上:

minikube tunnel

然后应用包含问题中定义的清单 YAML 文件:

kubectl apply -f <your-deployment>.yaml

✌️


推荐阅读