33·Service进阶

ClusterIP 服务

kubernetesserviceclusteripnetworking

ClusterIP 服务

学习目标

  1. 理解 ClusterIP 的工作原理
  2. 掌握 ClusterIP 的配置方法
  3. 了解 ClusterIP 的使用场景

核心概念

一句话解释

ClusterIP 是 Kubernetes 默认的 Service 类型,提供集群内部的稳定访问入口,仅在集群内部可访问。

ClusterIP 工作原理

集群内部
┌─────────────────────────────────────────┐
│  ClusterIP Service                      │
│  IP: 10.96.0.100                        │
│  Port: 80                               │
│  ┌─────────────────────────────────┐   │
│  │  Endpoints                      │   │
│  │  - 10.244.1.5:8080              │   │
│  │  - 10.244.2.8:8080              │   │
│  │  - 10.244.1.12:8080             │   │
│  └─────────────────────────────────┘   │
└─────────────────────────────────────────┘
        │           │           │
        ▼           ▼           ▼
┌───────────┐ ┌───────────┐ ┌───────────┐
│   Pod 1   │ │   Pod 2   │ │   Pod 3   │
│  10.244.1.5│ │ 10.244.2.8│ │ 10.244.1.12│
└───────────┘ └───────────┘ └───────────┘

ClusterIP 配置

apiVersion: v1
kind: Service
metadata:
  name: my-service
  namespace: default
spec:
  type: ClusterIP
  selector:
    app: my-app
  ports:
    - name: http
      protocol: TCP
      port: 80
      targetPort: 8080

配置参数说明

参数说明默认值
typeService 类型ClusterIP
selectorPod 选择器
portService 端口
targetPortPod 端口与 port 相同
protocol协议TCP
name端口名称

ClusterIP 访问方式

1. 通过 ClusterIP 访问
   curl http://10.96.0.100:80

2. 通过 DNS 名称访问
   curl http://my-service.default.svc.cluster.local:80

3. 通过简短 DNS 名称访问(同命名空间)
   curl http://my-service:80

ClusterIP 端口映射

┌─────────────────────────────────────────┐
│  Service                                │
│  port: 80 ──────────────────────────────┼─→ 客户端访问端口
│  targetPort: 8080 ──────────────────────┼─→ Pod 监听端口
└─────────────────────────────────────────┘

ClusterIP 与 Endpoints

# 查看 Service
kubectl get service my-service

# 查看 Endpoints
kubectl get endpoints my-service

# 输出示例
# NAME         ENDPOINTS                                      AGE
# my-service   10.244.1.5:8080,10.244.2.8:8080,10.244.1.12:8080   5m

ClusterIP 特性

特性说明
集群内访问仅集群内部可访问
稳定 IPService IP 不会变化
负载均衡自动分发请求到后端 Pod
DNS 解析自动创建 DNS 记录
健康检查自动移除不健康的 Pod

ClusterIP 使用场景

1. 内部微服务通信
   - 服务 A → Service B → Pod B

2. 数据库访问
   - App → DB Service → DB Pod

3. 缓存服务
   - App → Redis Service → Redis Pod

4. API 网关
   - 外部 → Ingress → API Service → API Pod

ClusterIP 网络规则

┌─────────────────────────────────────────┐
│  iptables/IPVS 规则                     │
├─────────────────────────────────────────┤
│  目标: 10.96.0.100:80                   │
│  规则: 随机选择后端 Pod                   │
│  - 10.244.1.5:8080 (权重: 1)            │
│  - 10.244.2.8:8080 (权重: 1)            │
│  - 10.244.1.12:8080 (权重: 1)           │
└─────────────────────────────────────────┘

实践练习

练习 1:创建 ClusterIP Service

创建一个 ClusterIP Service:

apiVersion: v1
kind: Service
metadata:
  name: web-service
spec:
  type: ClusterIP
  selector:
    app: web
  ports:
    - port: 80
      targetPort: 8080

练习 2:验证 ClusterIP

  1. 创建 Service
  2. 查看 Service IP
  3. 从集群内部访问 Service
  4. 查看 Endpoints

常见误解

1. ClusterIP 不是外部访问

错误:从集群外部访问 ClusterIP
正确:ClusterIP 仅限集群内部访问

需要外部访问:使用 NodePort 或 LoadBalancer

2. ClusterIP 不是 Pod IP

ClusterIP:Service 的虚拟 IP
Pod IP:Pod 的实际 IP

ClusterIP 是稳定的,Pod IP 是变化的

小结

要点说明
ClusterIP默认 Service 类型
集群内访问仅集群内部可访问
稳定 IP提供稳定的访问入口
负载均衡自动分发请求到后端 Pod
使用场景内部微服务通信

练习编辑器

bash
Loading...

继续学习

完成本课后,建议继续学习下一课「NodePort 服务」 以巩固所学知识。