首页 > 解决方案 > 为什么 k8s 控制平面中没有使用 10251 和 10252 端口?

问题描述

我正在关注这一点,并准备要求我们的 IT 团队为我打开硬件防火墙端口:

控制平面节点

协议 方向 端口范围 目的 使用者
TCP 入站 6443* Kubernetes API 服务器 全部
TCP 入站 2379-2380 etcd 服务器客户端 API kube-apiserver, etcd
TCP 入站 10250 kubelet API 自我,控制平面
TCP 入站 10251 kube-调度器 自己
TCP 入站 10252 kube-控制器-管理器 自己

工作节点

协议 方向 端口范围 目的 使用者
TCP 入站 10250 kubelet API 自我,控制平面
TCP 入站 30000-32767 NodePort 服务†</td> 全部

在我要求 IT 为我打开硬件端口之前,我检查了没有硬件防火墙的本地环境,我看到了这个:

# netstat -oanltp | grep 10250
tcp6       0      0 :::10250       :::*              LISTEN      3914/kubelet         off (0.00/0/0)
# netstat -oanltp | grep 10251
# netstat -oanltp | grep 10252

您可以看到在10251和上没有任何东西在听10252。但是我的kube-schedulerandkube-controller-manager正在运行,一切看起来都很好:

kube-system   kube-controller-manager-shlava     1/1     Running     0          47h     10.192.244.109   
kube-system   kube-scheduler-shlava              1/1     Running     0          47h     10.192.244.109   

所以我想知道:没有人在听10251和正常10252吗?

标签: kubernetes

解决方案


答案是:视情况而定

  • 您可能已经指定了一个不同的端口来提供带有--port标志的 HTTP
  • 您可能已经完全禁用了 HTTP 服务--port 0
  • 您使用的是最新版本的 K8s

最后一个是最有可能的,因为使用 kubeadm 创建集群说明它是为1.21版编写的

端口1025110252已在1.17版本中被替换(在此处查看更多信息)

Kubeadm:允许使用安全的 kube-scheduler 和 kube-controller-manager 端口进行健康检查。对于 kube-scheduler 是 10251,变成 10259。对于 kube-controller-manager 是 10252,变成 10257。

此外,此功能在1.19中已被废弃(更多此处

Kube-apiserver:componentstatus API 已弃用。此 API 提供了 etcd、kube-scheduler 和 kube-controller-manager 组件的状态,但仅当这些组件位于 API 服务器本地,并且当 kube-scheduler 和 kube-controller-manager 暴露了不安全的健康端点时才有效。kube-apiserver 健康检查中包含 etcd 健康而不是这个 API,并且 kube-scheduler/kube-controller-manager 健康检查可以直接针对这些组件的健康端点进行。

文档的某些部分似乎已过时。


推荐阅读