HelloCoder HelloCoder
首页
《Java小白求职之路》
《小白学Java》
计算机毕设
  • 一些免费计算机资源
  • 脚手架工具
  • 《从0到1学习Java多线程》
  • 《从0到1搭建服务器》
  • 《可观测和监控》
  • 《k8s学习心得》
随笔
关于作者
首页
《Java小白求职之路》
《小白学Java》
计算机毕设
  • 一些免费计算机资源
  • 脚手架工具
  • 《从0到1学习Java多线程》
  • 《从0到1搭建服务器》
  • 《可观测和监控》
  • 《k8s学习心得》
随笔
关于作者
  • 《从0到1学习Java多线程》

  • 《从0到1搭建服务器》

  • 可观测和监控

  • 玩转IDEA

  • 03-RPC

  • 04-Spring源码

  • 05-《Java日志框架》

  • Flyme公有云平台建设
  • k8s

    • (一)线程是什么
    • 常见疑问
    • 运行一个k8s部署的应用
    • 网络组件
    • docker compose和k8s deployment文件
    • dokcer的网卡
    • k8s-master初始化网段
    • Kubernetes API Service
    • k8s的DNS
    • 什么是 Sandbox
    • 如何访问pod
    • 常见命令
  • 专栏
  • k8s
#KubernetesAPIService
HaC
2026-06-13
目录

Kubernetes API Service

[root@yudianxx ~]# kubectl get svc | grep

NAME            TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE

kubernetes      ClusterIP   10.96.0.1       <none>        443/TCP        7h28m

在 K8s 的大本营里,这个躺在列表第一行的 kubernetes 服务,就是整个集群的“中央政务大厅入口”(官方黑话叫:Kubernetes API Service)。

它是 K8s 在创建集群的第 0 秒,由系统自动生成、永远不准删除的神级 Service。它的唯一职责,是让集群内部所有的 Pod 容器,都能合法、安全地访问到 Master 节点的大脑(ApiServer)。

我们用一句话戳破它的底层:10.96.0.1 就是 Master 节点上 kube-apiserver 组件在集群内部的虚拟代言人。

# 🧭 为什么需要这个 10.96.0.1?(痛点场景)

还记得我们之前聊的 K8s 架构吗?Master 节点的 apiserver(物理 IP 是 192.168.1.50:6443)是整个集群的唯一指挥官。

现在,假设你要在 Worker 节点上部署一套高级的容器化自建网关(比如 APISIX),或者你未来要跑的 Hermes 飞书智能体系统:

  • 智能体/网关容器在干活时,必须高频地向 K8s 大脑提问:“老大,现在集群里有哪些健康的 Nginx Pod IP 呀?快把列表发给我,我要做动态路由!”
  • 这时候,容器(Pod)必须要和 ApiServer 通信。

那么问题来了,容器怎么知道 ApiServer 的物理 IP 是 192.168.1.50?如果以后 Master 节点换了物理 IP 怎么办?

为了让容器不需要硬编码 Master 的物理 IP,K8s 出了个绝招:在集群刚诞生时,就固定分配一个 10.96.0.1(443端口)作为 ApiServer 的永恒虚拟化替身。

# 🧬 物理肉身:它是如何瞒天过海的?

这个 10.96.0.1 背后并没有跑专门的“转发容器”,它的背后直接连着 Master 节点的控制面组件。

如果你在 Master 节点上执行这条命令,查看它的底层明细(Endpoints):

kubectl describe svc kubernetes

💡 你会看到类似这样的硬核真相:

[root@yudianxx ~]# kubectl describe svc kubernetes
Name:              kubernetes
Namespace:         default
Labels:            component=apiserver
                   provider=kubernetes
Annotations:       <none>
Selector:          <none>
Type:              ClusterIP
IP Family Policy:  SingleStack
IP Families:       IPv4
IP:                10.96.0.1
IPs:               10.96.0.1
Port:              https  443/TCP
TargetPort:        6443/TCP
Endpoints:         192.168.1.50:6443
Session Affinity:  None
Events:            <none>

看到其中的 Endpoints 挂着 192.168.1.50:6443(你的 Master 物理 IP 和 ApiServer 默认安全端口)了吗?

这物理印证了:集群里的任何 Pod 只要访问 https://10.96.0.1:443,流量都会被底层的 kube-proxy 瞬间、无缝地平移抛给 Master 节点的 kube-apiserver 进程。

# 🔒 进阶彩蛋:任何一个 Pod 刚出生,就知道怎么找它

为了让天底下的所有 Pod 容器都能无缝跟大脑通信,K8s 做到了极致的保姆级服务。

你可以重新“魂穿”进入你的 Nginx 容器内部:

kubectl exec -it nginx-deployment-775f57cb68-p6cql -- sh

在容器里输入 env 命令,查看当前容器的环境变量:

/ # env | grep KUBERNETES

💡 你会看到每个容器血管里都流淌着这几行环境变量:

/ # env | grep KUBERNETES
KUBERNETES_PORT=tcp://10.96.0.1:443
KUBERNETES_SERVICE_PORT=443
KUBERNETES_PORT_443_TCP_ADDR=10.96.0.1
KUBERNETES_PORT_443_TCP_PORT=443
KUBERNETES_PORT_443_TCP_PROTO=tcp
KUBERNETES_PORT_443_TCP=tcp://10.96.0.1:443
KUBERNETES_SERVICE_PORT_HTTPS=443
KUBERNETES_SERVICE_HOST=10.96.0.1

K8s 在每一个 Pod 诞生时,都会强行往它的身体里注入这几行环境变量。这样一来,任何微服务代码(或者高阶的云原生智能体框架),只要在代码里读取 KUBERNETES_SERVICE_HOST,就能顺藤摸瓜找到 10.96.0.1,直接跟集群大脑开始无缝谈话。

阅读全文
×

(为防止恶意爬虫)
扫码或搜索:HelloCoder
发送:290992
即可永久解锁本站全部文章

解锁
#KubernetesAPIService
上次更新: 2026-06-13 17:29:54
最近更新
01
(一)线程是什么
06-14
02
MySQL支持的锁有哪些
06-13
03
HTTP 是不保存状态的协议, 如何保存用户状态
06-13
更多文章>
Theme by Vdoing | Copyright © 2020-2026 HaC
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式