我部署了一个具有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服务。
答案 0 :(得分:1)
Nodeport会经过额外的网络跃点,并在kube代理提供的L4层上使用IP表负载平衡,因此预计它会很慢,尤其是当您从未计划的节点访问Pod时。同样,kube代理也需要在要通过nodeport服务访问pod的节点中运行。
我建议使用反向代理(例如nginx)作为入口或L7负载平衡器,以提高性能。