首页 > 解决方案 > 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"

标签: kubernetes

解决方案


我找不到这个问题的确切原因。但是当我用 构建 k8s 集群时eksctl,它可以工作。我认为在 AWS EC2 / kubespary 上存在一些我不知道的点。无论如何,NodePort可以从所有节点访问服务。


推荐阅读