侧边栏壁纸
博主头像
LLJJJJ的博客

行动起来,活在当下

  • 累计撰写 7 篇文章
  • 累计创建 6 个标签
  • 累计收到 4 条评论

目 录CONTENT

文章目录

K8s Service

Administrator
2026-08-05 / 0 评论 / 0 点赞 / 6 阅读 / 0 字

一、Service 的本质

Service 是 K8s 里一种“抽象资源”,它为一组功能相同的 Pod 提供一个固定的访问入口,并自动做负载均衡。

固定入口

Pod 的 IP 是临时的(重启就变),Service 的 IP(ClusterIP)是永久的

服务发现

你不需要知道 Pod 的真实 IP,只要访问 Service 的名字或 IP 就行了

负载均衡

访问 Service 的请求会被自动分发到它后面的多个 Pod 上

二、Service 的 4 种类型(type)

type

访问范围

谁分配 IP

适用场景

ClusterIP(默认)

仅集群内部

K8s 自动分配虚拟 IP

微服务之间互相调用(登录服 → 游戏服)

NodePort

集群外可通过 节点IP:固定端口 访问

K8s 在每台节点开端口(30000-32767)

测试/演示,临时让外网访问

LoadBalancer

公网通过云厂商 LB 访问

云厂商分配公网 IP

生产环境公网入口(游戏网关)

ExternalName

把集群外服务映射成集群内 Service

无 IP,返回 CNAME 域名

访问外部数据库/第三方 API

三、Service 和 Pod 是怎么关联的?(核心机制)

Service 不直接绑定 Pod,而是通过 标签选择器(selector) 动态关联。

yaml

apiVersion: v1
kind: Service
metadata:
  name: game-service
spec:
  selector:
    app: game-server          # ← 找所有带这个标签的 Pod
  ports:
  - port: 80
    targetPort: 8080

四、Service 的负载均衡是怎么实现的?(kube-proxy)

当客户端访问 Service 的 ClusterIP 时,流量实际上是被 kube-proxy 组件拦截并转发的。

两种模式

模式

原理

特点

iptables(默认)

在 Linux 内核的 iptables 表里写 NAT 规则,随机选一个后端 Pod

稳定,但规则量大了(几万条)会变慢

IPVS(高性能)

基于 Linux 内核的 IPVS 模块,专门为负载均衡设计

性能极高,支持轮询、最少连接等多种算法,大厂首选

五、Service 的访问方式(3 种)

访问方式

说明

示例

通过 Service 名(集群内)

集群内的 Pod 直接使用 Service 名称访问,由 K8s DNS(CoreDNS)解析

http://game-service:80

通过 ClusterIP(集群内)

直接访问 Service 的虚拟 IP

http://10.96.100.200:80

通过 NodePort/LoadBalancer(集群外)

外部用户通过节点 IP + NodePort 或云 LB 的公网 IP 访问

http://192.168.1.100:31560

六、Ingress vs Service

对比维度

Service

Ingress

工作层级

4 层(TCP/UDP)

7 层(HTTP/HTTPS)

负载均衡

四层转发(IP + 端口)

七层路由(域名 + URL 路径)

访问范围

主要处理集群内部流量

主要处理集群外部流量(公网)

是否支持 HTTPS

❌ 不直接支持

✅ 支持(统一配置 SSL 证书)

路由能力

只能按端口转发

可按域名/路径精细路由

适用场景

微服务内部互调

Web 服务/API 网关入口

总结一句话

Service 管“内部互找”(东西流量),Ingress 管“外部来玩”(南北流量)。

0

评论区