Nodeport

来自linux中国网wiki
跳到导航 跳到搜索

原因和分析

(1)找到pod所在节点,从pod所在k8s节点上通过{nodeIp}:{nodePort}访问,如果访问不了,可能是pod或service没有成功部署;

(2)从其它node节点通过{nodeIp}:{nodePort}访问,如果不能访问,执行

kubectl describe pod {podName} -n={namespace}

查看pod描述信息,找到pod ip,直接对着pod访问{podIp}:{containerPort},如果无法访问,尝试ping一下{podIp},如果ping不通,说明k8s节点之间docker容器网络不通,需要安装网络组件如flannel之类;

(3)从master节点通过{nodeIp}:{nodePort}访问,如果node节点可以访问{nodePort}而master节点无法访问,执行
netstat -nlp | grep {nodePort}

查看{nodePort}端口是否有服务在监听,正常会看到类似:
tcp6       0      0 :::30804                :::*                    LISTEN      3089/kube-proxy

说明nodePort 30804端口正在被kube-proxy服务在3089进程监听,如果没有则可能是没有启动kube-proxy服务,在k8s里面service相关的功能是依赖kube-proxy实现的。

master节点无须启动kubelet和kube-proxy服务,如果想从master节点访问service,可以在master节点上启动kube-proxy服务,如果想让pod调度到master节点,可以启动kubelet服务

或者master node also

master 也当作node  这里的master hostname 为	ubuntu18OB
evan@ubuntu18:~$ kubectl  taint node ubuntu18 node-role.kubernetes.io/master-
node/ubuntu18 untainted

#master only
kubectl  taint node ubuntu18 node-role.kubernetes.io/master="":NoSchedule

现象

evan@k8s-master:~$ kubectl apply -f httpd-svc.yml 
service/httpd-svc created
evan@k8s-master:~$ kubectl get service httpd-svc 
NAME        TYPE       CLUSTER-IP     EXTERNAL-IP   PORT(S)          AGE
httpd-svc   NodePort   10.99.34.189   <none>        8080:31101/TCP   14s
evan@k8s-master:~$ sudo netstat  -nlpt | grep 31101

#用上master ip访问不了  不过我的master不是node 
evan@k8s-master:~$ curl 192.168.88.58:31101
curl: (7) Failed to connect to 192.168.88.58 port 31101: Connection refused
evan@k8s-master:~$ curl 192.168.88.59:31101
<html><body><h1>It works!</h1></body></html>evan@k8s-master:~$ 
evan@k8s-master:~$ curl 192.168.88.60:31101
<html><body><h1>It works!</h1></body></html>evan@k8s-master:~$ 
evan@k8s-master:~$ sudo ps -ef | grep kube-prox
evan     29440 14359  0 11:31 pts/0    00:00:00 grep --color=auto kube-prox




evan@k8s-master:~$ kubectl get service
NAME              TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
example-service   NodePort    10.111.31.36    <none>        80:30046/TCP     3d4h

evan@k8s-master:~$ kubectl delete deployments/nginx services/example-service 
service "example-service" deleted



see also

kubernetes踩坑:nodePort拒绝访问的问题