繁体   English   中英

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

[英]Unable to access node app from K8s cluster

我已经将一个非常简单的节点应用程序部署到 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

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

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

在单独的终端上:

minikube tunnel

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

kubectl apply -f <your-deployment>.yaml

✌️

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

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

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

第二种选择是使用minikube tunnel命令。 它将 externalIP 分配给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下访问。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM