目录
[一、Service 核心类型详解(高级篇)](#一、Service 核心类型详解(高级篇))
[1. Headless 类型(无头服务)](#1. Headless 类型(无头服务))
[2. LoadBalancer 类型(外部负载均衡)](#2. LoadBalancer 类型(外部负载均衡))
[二、Ingress 控制器:七层流量管理](#二、Ingress 控制器:七层流量管理)
[1. 核心概念](#1. 核心概念)
[2. 工作原理](#2. 工作原理)
[3. 实战示例](#3. 实战示例)
一、Service 核心类型详解(高级篇)
1. Headless 类型(无头服务)
功能 :不分配 ClusterIP,DNS 解析直接返回后端所有 Pod 的 IP 列表,不提供负载均衡。
适用场景:有状态应用(StatefulSet)服务发现、客户端需要直连 Pod、自行实现负载均衡。
核心特征 :通过 clusterIP: None 开启无头模式。
测试方式 :进入 Pod 内部使用 nslookup 解析 Service 名称,可直接获取全部后端 Pod IP。
2. LoadBalancer 类型(外部负载均衡)
功能:使用外部负载均衡器暴露服务,使服务能从集群外部高可用访问。
实现工具:自建环境使用 MetalLB 提供负载均衡能力。
MetalLB 原理:
地址分配:MetalLB Controller 从预先配置的 IP 地址池分配外部 IP,并管理其生命周期。
对外广播:Speaker 组件以 DaemonSet 形式运行,通过 ARP/NDP(Layer2)或 BGP 协议将 IP 广播到局域网。
流量路径:外部流量 → LoadBalancer IP → kube-proxy → 后端 Pod。
二、Ingress 控制器:七层流量管理
1. 核心概念
Ingress 是管理集群外部 HTTP/HTTPS 流量 的 API 对象,相当于 Kubernetes 的七层负载均衡网关。
核心功能:负载均衡
SSL 证书终止(HTTPS 卸载)
基于域名的虚拟主机托管
多域名 / 多服务共用 80/443 端口
必须条件:集群必须运行 Ingress Controller(如 Nginx Ingress),仅创建 Ingress 规则不生效。
2. 工作原理
定义规则:通过 YAML 配置域名、路径、对应的后端 Service。
接收流量:客户端访问域名 → 请求到达 Ingress Controller。
匹配路由:Ingress Controller 根据域名与路径匹配规则。
转发流量:将请求转发到对应 Service,再由 Service 转发到后端 Pod。
3. 实战示例
# Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment-ingress
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
---
# Service
apiVersion: v1
kind: Service
metadata:
name: ingressservice
spec:
selector:
app: nginx
ports:
- port: 80
targetPort: 80
---
# Ingress
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: testingress
spec:
ingressClassName: nginx
rules:
- host: www.testingress.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: ingressservice
port:
number: 80
测试方法:配置 hosts 将域名指向 Ingress 入口 IP,使用 curl 或浏览器访问。
三、高频问答(图片原文答案,几乎不改)
Q:举例说明 ClusterIP 类型 Service 的用法。
A:ClusterIP 类型服务通过集群内部 IP 暴露服务,仅允许在集群内部访问,是默认 Service 类型。例如创建服务暴露 8000 端口,将流量转发到带有 app:nginx 标签的 Pod 的 80 端口。在主机 shell 中不能直接用 Pod IP 访问,必须通过 ClusterIP:8000 访问。
Q:举例说明 NodePort 类型 Service 的用法。
A:NodePort 类型通过每个节点的 IP 和静态端口暴露服务。例如指定节点端口为 31788,外部通过访问 节点 IP:31788 即可到达后端 Pod,NodePort 服务会自动路由到对应的 Pod。
Q: 举例说明 Headless 类型 Service 的用法。
A:Headless Service 不分配 ClusterIP,解析时直接返回后端 Pod IP 列表。需要进入 Pod 内部,使用集群 DNS 进行解析测试,常用于 StatefulSet 等有状态应用场景。
Q:说明 MetalLB 所实现的 LoadBalancer Service 的原理。
A:MetalLB 通过标准网络协议模拟云厂商负载均衡器,为 Service 分配外部可访问的稳定 IP。Layer2 模式:通过 ARP/NDP 响应将 IP 绑定到某一节点,流量导入该节点后分发给 Pod。BGP 模式:各节点与路由器建立 BGP 会话,发布等价路由,实现多节点负载均衡。
Q: 详细说明 Ingress 的实现原理和它所实现的功能。
A:Ingress 是管理外部 HTTP/HTTPS 访问的 API 对象,流量路由由 Ingress 规则控制,必须依赖 Ingress Controller 才能生效。功能包括:负载均衡、SSL 终结、基于域名的虚拟主机托管。实现原理:外部请求到达 Ingress Controller → 根据域名与路径匹配规则 → 转发到对应 Service → 流量到达后端 Pod。