【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。

相关推荐
Cyber4K3 小时前
【Kubernetes专项】温故而知新,重温技术原理(2)
云原生·容器·kubernetes
雨奔6 小时前
Kubernetes 网络策略(NetworkPolicy)完全指南:声明式 Pod 通信管控
网络·容器·kubernetes
身如柳絮随风扬6 小时前
Kubernetes v1.20.9 集群搭建
云原生·容器·kubernetes
LSL666_6 小时前
微服务架构
微服务·云原生·架构
蛐蛐蛐8 小时前
在Windows 11上安装Docker的踩坑记录
运维·docker·容器
AI精钢8 小时前
Hermes Agent 整合 OpenCode CLI 的实战经验
人工智能·云原生·aigc
cyber_两只龙宝8 小时前
【Oracle】Oracle之使用DML语言管理表
linux·运维·服务器·数据库·云原生·oracle
古典和浪漫8 小时前
docker file 中设置软链接和在k8s 中配置同步时区 有什么区别,各自优缺点
docker·容器·kubernetes
成为你的宁宁8 小时前
【K8s ServiceAccount 机制原理与 RBAC 权限实战应用】
云原生·容器·kubernetes