无法访问 kubernetes nodeport 服务

时间:2021-03-31 23:08:25

标签: docker kubernetes microservices minikube api-gateway

我认为我没有遗漏任何东西,但是我的 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,这是我在拨打电话时遇到的错误:

enter image description here

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

我别无选择,尽我所能,提前致谢。

编辑 1:

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

enter image description here

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

enter image description here

至于端口转发,出现权限错误:

enter image description here

2 个答案:

答案 0 :(得分:1)

从文档中,您看到寺庙会像这样 <NodeIP>:<NodePort>

<块引用>

NodePort:在静态端口(NodePort)处公开每个节点 IP 上的服务。 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 中尝试过的网址。

答案 1 :(得分:1)

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

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

第二,当使用 minikube 时,为了实现我想要的(在我的本地机器上运行 kubernetes,我的 Angular 客户端也在我的本地机器上),你必须创建一个 minikube 隧道,他们在这里解释的确切方式:{{ 3}}