无法访问 kubernetes nodeport 服务

Posted

技术标签:

【中文标题】无法访问 kubernetes nodeport 服务【英文标题】:Can't access kubernetes nodeport service 【发布时间】:2021-06-27 23:22:35 【问题描述】:

我认为我没有错过任何东西,但我的 Angular 应用似乎无法联系我通过 Kubernetes 公开的服务。

每当我尝试在本地主机上调用暴露的节点端口时,都会被拒绝连接。

部署文件

apiVersion: apps/v1
kind: Deployment
metadata:
  name: society-api-gateway-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: society-api-gateway-deployment
  template:
    metadata:
      labels:
        app: society-api-gateway-deployment
    spec:
      containers:
      - name: society-api-gateway-deployment
        image: tbusschaert/society-api-gateway:latest
        ports:
        - containerPort: 80

服务文件

apiVersion: v1
kind: Service
metadata:
  name: society-api-gateway-service
spec:
  type: NodePort
  selector:
    app: society-api-gateway-deployment
  ports:
  - name: http
    port: 80
    targetPort: 80
    nodePort: 30001

我仔细检查了,呼叫没有到达我的 pod,这是我在拨打电话时遇到的错误:

我在本地机器上使用 minikube 和 kubectl。

我没有选择,尽我所能,在此先感谢。

编辑 1:

所以按照建议,我使用节点IP调用服务:

我在 Angular 项目中更改了 IP,现在出现连接超时:

至于端口转发,我得到一个权限错误:

【问题讨论】:

【参考方案1】:

从 doc 中,您看到模板将是这样的 <NodeIP>:<NodePort>

NodePort:在每个节点的 IP 上的静态端口(NodePort)上公开服务。自动创建 NodePort 服务路由到的 ClusterIP 服务。您可以通过请求 <NodeIP>:<NodePort> 从集群外部联系 NodePort 服务。

首先,从kubectl get node -o wide comamnd 获取NodeIP。 然后尝试使用<NodeIP>:<NodePort>。例如,如果 NodeIP 是 172.19.0.2,则尝试使用您的子 url 使用 172.19.0.2:30001

或者,另一种方法是使用端口转发。在终端中首先尝试使用kubectl port-forward svc/society-api-gateway-service 80:80 进行端口转发。然后使用您尝试过的网址与localhost

【讨论】:

使用 NodeIP 进行调用,现在又出现一个错误(编辑原始帖子以显示过程)。我尝试了端口转发,得到一个权限错误,也显示在编辑中。 kubectl port-forward svc/society-api-gateway-service 8081:80 尝试使用不同的本地端口。本地端口 80 已在使用中,这就是您收到此错误的原因 还有一件事,您的服务器似乎只监听 ipv6 连接 也许我应该指定,我正在使用 minikube(我在我的开发机器上运行集群,并且角度应用程序没有部署在 kubernetes 上,它直接来自 IDE)。我会尝试端口转发并让你保持最新 @Emon46 可能是对的。你能确保你的应用程序正在侦听 IPv4 吗?【参考方案2】:

所以,正如我所想,问题与 minikube 未打开我的本地主机有关。

首先我不需要 NodePort,但 LoadBalancer 也适合我的需要,所以我的 API 网关变成了 LoadBalancer。

其次,当使用 minikube 时,为了实现我想要的(在我的本地机器上运行 kubernetes,并且我的 angular 客户端也在我的本地机器上),你必须创建一个 minikube 隧道,他们在这里是如何解释的:@987654321 @

【讨论】:

以上是关于无法访问 kubernetes nodeport 服务的主要内容,如果未能解决你的问题,请参考以下文章

无法通过 Kubernetes 的 AWS ELB 访问 Grafana(用于 prometheus)

技术漫谈 | Kubernetes 的 NodePort,LoadBalancer 和 Ingress 该如何选择?

Kubernetes 入口 |无法解析主机名

Kubernetes进阶之路(九)Service系列之ClusterIP&NodePort

SuSE 上的 Kubernetes:NodePort 服务问题

Kubernetes NodePort 自定义端口