kubernetes - k8s nodeport 不适用于特定节点
问题描述
我是k8s的新手。
我正在NodePort
用我的 k8s 集群测试服务。我使用 kubespray 使用 aws EC2 实例构建了我的 k8s 集群。我的集群由 1 个主节点和 5 个节点组成。下面是我的清单文件。
# deployment.yml
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-react-app
spec:
replicas: 2
selector:
matchLabels:
app: my-react-app
template:
metadata:
labels:
app: my-react-app
spec:
containers:
- name: my-react-app
image: 10.1.3.245/my-react-app
ports:
- containerPort: 80
restartPolicy: Always
# service.yml
apiVersion: v1
kind: Service
metadata:
name: my-react-app
spec:
type: NodePort
ports:
- port: 80
targetPort: 80
protocol: TCP
nodePort: 31000
selector:
app: my-react-app
这也是我的节点 ips。
# This is from ansible inventory.
node1 ansible_host=10.1.3.58 ip=10.1.3.58
node2 ansible_host=10.1.3.191 ip=10.1.3.191
node3 ansible_host=10.1.3.88 ip=10.1.3.88
node4 ansible_host=10.1.3.74 ip=10.1.3.74
node5 ansible_host=10.1.3.228 ip=10.1.3.228
我的问题是,在 5 个节点中,只有 1 个节点无法访问。我使用 curl 测试了可访问性。例如,curl 10.1.3.58:31000
有效但curl 10.1.3.74:31000
无效。如果我的理解是正确的,每个节点都应该为 NodePort 服务开放 31000 端口。
任何人都可以提供任何建议吗?
(Edit1)这是评论的答案
ubuntu@master1:~$ kubectl get service
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.233.0.1 <none> 443/TCP 9d
my-react-app NodePort 10.233.8.196 <none> 80:31000/TCP 27h
ubuntu@master1:~$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
master1 Ready master 9d v1.19.6
master2 NotReady master 9d v1.19.6
node1 Ready <none> 9d v1.19.6
node2 Ready <none> 9d v1.19.6
node3 Ready <none> 9d v1.19.6
node4 Ready <none> 9d v1.19.6
node5 Ready <none> 9d v1.19.6
(编辑2)
# curl result
ubuntu@master1:~$ curl -v 10.1.3.74:31000
* Rebuilt URL to: 10.1.3.74:31000/
* Trying 10.1.3.74...
* TCP_NODELAY set
* connect to 10.1.3.74 port 31000 failed: Connection timed out
* Failed to connect to 10.1.3.74 port 31000: Connection timed out
* Closing connection 0
curl: (7) Failed to connect to 10.1.3.74 port 31000: Connection timed out
# recent journalctl result
journalctl -u kubelet -r
Jan 20 14:28:01 master1 kubelet[24294]: I0120 14:28:01.383853 24294 setters.go:77] Using node IP: "10.1.3.245"
Jan 20 14:27:51 master1 kubelet[24294]: I0120 14:27:51.329070 24294 setters.go:77] Using node IP: "10.1.3.245"
Jan 20 14:27:41 master1 kubelet[24294]: I0120 14:27:41.279939 24294 setters.go:77] Using node IP: "10.1.3.245"
Jan 20 14:27:31 master1 kubelet[24294]: I0120 14:27:31.227616 24294 setters.go:77] Using node IP: "10.1.3.245"
Jan 20 14:27:25 master1 kubelet[24294]: I0120 14:27:25.704775 24294 kubelet_getters.go:176] "Pod status updated" pod="kube-system/kube-controller-manager-m
Jan 20 14:27:25 master1 kubelet[24294]: I0120 14:27:25.704533 24294 kubelet_getters.go:176] "Pod status updated" pod="kube-system/kube-apiserver-master1" s
Jan 20 14:27:25 master1 kubelet[24294]: I0120 14:27:25.703786 24294 kubelet_getters.go:176] "Pod status updated" pod="kube-system/kube-scheduler-master1" s
Jan 20 14:27:24 master1 kubelet[24294]: W0120 14:27:24.113350 24294 container_manager_linux.go:954] MemoryAccounting not enabled for pid: 24294
Jan 20 14:27:24 master1 kubelet[24294]: W0120 14:27:24.112644 24294 container_manager_linux.go:951] CPUAccounting not enabled for pid: 24294
Jan 20 14:27:21 master1 kubelet[24294]: I0120 14:27:21.170841 24294 setters.go:77] Using node IP: "10.1.3.245"
解决方案
我找不到这个问题的确切原因。但是当我用 构建 k8s 集群时eksctl
,它可以工作。我认为在 AWS EC2 / kubespary 上存在一些我不知道的点。无论如何,NodePort
可以从所有节点访问服务。
推荐阅读
- rundeck - Rundeck 作业参考 - 使用变量作为作业名称
- vue.js - v-for 带条件元素,不带
- .net - 为什么我无法从 SQL 查询中获取价值?
- reverse-proxy - FusionAuth 重定向 url IIS 反向代理问题
- oracle - 如何在Oracle中列出所有标记为角色的对象
- kubernetes - Logstash 中的“预期的#, =>”是什么意思?
- java - ClipboardManager.getText() 是否有替代方案(已折旧)?
- python - 在保存的模型上进行 TensorFlow 训练
- javascript - javascript, faceapi.js 改变文本,基于面部表情(快乐、悲伤、愤怒等)
- javascript - 如何将字符串解析为 react-native 组件?