【Kubernetes】(九)Service 2

目录

[一、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。

相关推荐
蜡笔婧萱6 小时前
Docker介绍及其基础简介(一)
云原生·eureka
谢亮_vipxieliang8 小时前
Kubernetes 的“操作系统化”:从容器编排到 AI 基础设施控制平面
人工智能·平面·kubernetes
sbjdhjd11 小时前
云安全 | Docker 容器逃逸复盘(三):docker.sock 挂载与 Docker-in-Docker 风险
经验分享·网络安全·docker·云原生·容器·kubernetes·云安全
热爱Liunx的丘丘人11 小时前
1、什么是K8s
云原生·容器·kubernetes
帷幕落秋12 小时前
Docker的两种安装
运维·docker·容器
fengkai454513 小时前
十二、Redis -2
运维·数据库·redis·容器
DolitD15 小时前
3D应用多实例并发中的GPU隔离技术路径分析
容器·gru·接口隔离原则
姜鱼问生16 小时前
docker exec 排查容器问题:从日志到进程
运维·网络·数据库·docker·容器
小匠石钧知19 小时前
07_在k8s集群中安装ingress-nginx
nginx·容器·kubernetes·ingress
零基础12319 小时前
Docker 部署实战:从入门到精通
docker·容器