无法从K8s群集访问节点应用

时间:2020-10-05 14:27:54

标签: node.js api kubernetes

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

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

当我尝试访问URL并检查“网络”标签时,请求永远不会完成,而会一直处于待处理状态。

节点应用程序是我做的一个非常简单的API,仅用于测试,因此在尝试访问应用程序时会使用route / 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

2 个答案:

答案 0 :(得分:2)

就像@Hackerman所述,如果您使用LoadBalancer类型的服务,则需要使用minikube tunnel。您可以遵循example。此类服务通常是指提供提供者负载均衡器,例如AWS ELB。但是在minikube的情况下,没有外部提供程序,您需要欺骗它以为有一个外部提供程序。

基本上,您需要先运行它,然后才能创建展开。

在另一个终端上:

minikube tunnel

然后应用您的清单YAML文件,其中包括您在问题中的定义:

kubectl apply -f <your-deployment>.yaml

✌️<​​/ p>

答案 1 :(得分:1)

除了@Rico答案:还有两种方法可以访问minikube上部署的应用程序。

第一-using NodePort。使用NodePort服务类型公开应用程序时,您可以通过执行minikube service list并访问输出显示的URL来访问它-它是minikube ip和nodeport的结果。输出将类似于以下内容:

|-------------|------------|----------------------------|-----|
|  NAMESPACE  |    NAME    |        TARGET PORT         | URL |
|-------------|------------|----------------------------|-----|
|             |
| default     | nginx      | http://192.168.39.22:30345 |
|             |
|-------------|------------|----------------------------|-----|

第二个选项是通过使用minikube tunnel命令。它将外部IP分配给通过LoadBalancer服务类型公开的应用程序。尝试访问它时,minikube tunnel必须正在运行,并且可以在单独的终端中使用externalIP:port访问它。 minikube tunnel的示例输出:

$minikube tunnel
Status:
        machine: minikube
        pid: 9284
        route: 10.96.0.0/12 -> 192.168.39.22
        minikube: Running
        services: [backend-load]

然后,您可以通过运行kubectl get service检查分配给该服务的外部IP:

kubectl get svc
NAME           TYPE           CLUSTER-IP       EXTERNAL-IP      PORT(S)          AGE
backend-load   LoadBalancer   10.100.120.115   10.100.120.115   3000:31676/TCP   110s

因此在此示例中,可以在10.100.120.115:3000下访问该应用程序。