访问nodePort服务时请求没有响应

时间:2020-03-09 13:51:41

标签: kubernetes

我部署了一个具有5个节点的kubernetes集群:matser worker1 worker2 worker3 worker4。

然后我创建一个具有1个副本的部署,该副本被安排在worker4上,暴露端口7777

创建服务

apiVersion: v1
kind: Service
metadata:
  name: service-test
spec:
  type: NodePort
  selector:
    app: app
  ports:
    - name: http
      protocol: TCP
      port: 80
      targetPort: 7777
      nodePort: 31000

创建服务后,我向worker4:31000 / test发送请求,它立即响应。

但是当我请求31000上的其他节点时,例如master:31100 / test,worker1:31100 / test。它没有响应,有时会响应,但是花费这么长时间。

当我使用lsof显示端口使用情况时,情况有所不同

[root@worker4 ~]# lsof -i:31000
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
wrapper 5251 root    5u  IPv4  33957      0t0  TCP localhost:32000->localhost:31000 (ESTABLISHED)
java    5355 root   13u  IPv6  35851      0t0  TCP localhost:31000->localhost:32000 (ESTABLISHED)
COMMAND    PID USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
kube-prox 9679 root   13u  IPv6 3746350      0t0  TCP *:31000 (LISTEN)

所以我该如何访问其他节点上的nodePort服务。

1 个答案:

答案 0 :(得分:1)

Nodeport会经过额外的网络跃点,并在kube代理提供的L4层上使用IP表负载平衡,因此预计它会很慢,尤其是当您从未计划的节点访问Pod时。同样,kube代理也需要在要通过nodeport服务访问pod的节点中运行。

我建议使用反向代理(例如nginx)作为入口或L7负载平衡器,以提高性能。