kubernetes - 为什么 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-scheduler
andkube-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
吗?
解决方案
答案是:视情况而定。
- 您可能已经指定了一个不同的端口来提供带有
--port
标志的 HTTP - 您可能已经完全禁用了 HTTP 服务
--port 0
- 您使用的是最新版本的 K8s
最后一个是最有可能的,因为使用 kubeadm 创建集群说明它是为1.21版编写的
端口10251
和10252
已在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 健康检查可以直接针对这些组件的健康端点进行。
文档的某些部分似乎已过时。
推荐阅读
- java - 暂停所有线程,无需等待
- selenium-webdriver - Selenium PDF 解析器
- python - 从多索引熊猫数据框中引用熊猫系列值
- django - 我应该在 Django 中进行版本控制 manage.py 吗?
- r - 如何用 lp 显示所有可能的解决方案 用 r 解决
- javascript - Redux:Reducer 在新添加时覆盖以前的状态
- curl - 如何通过 cURL 发出谷歌图片搜索请求?
- matlab - 当从双变量正态分布生成 1000 个随机数时绘制双变量 pdf
- java - 是否可以成为 Firebase 实时数据库结构的一部分,仅限本地
- javascript - react-admin:编辑表单未预先填充现有属性