首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Kubernetes Service字段配置详解

Kubernetes Service字段配置详解

作者头像
用户11081884
发布2026-07-20 17:36:01
发布2026-07-20 17:36:01
380
举报

Kubernetes Service是集群中定义Pod访问策略的核心资源对象,它为Pod提供稳定的网络访问入口,使应用可以稳定地被访问而不受后端Pod变化的影响。本文将详细解析Service的关键字段配置,帮助您全面掌握Service的配置技巧。

一、Service基础字段解析

1. 元数据字段

代码语言:javascript
复制
apiVersion: v1
kind: Service
metadata:
  name: web-service
  namespace: production
  labels:
    app: web-app
    environment: prod
  • apiVersion: 固定为v1,表示使用Service的稳定版本API
  • kind: 固定为Service,表示资源类型
  • metadata.name: Service名称,在命名空间内必须唯一
  • metadata.namespace: 可选,指定Service部署的命名空间
  • metadata.labels: 可选,为Service添加标签用于分类和组织

2. 核心配置字段

代码语言:javascript
复制
spec:
  selector:
    app: web-app
    tier: frontend
  ports:
    - name: http
      protocol: TCP
      port: 80
      targetPort: 8080
  • spec.selector: 必填,标签选择器,确定哪些Pod属于这个Service
  • spec.ports: 必填,定义Service暴露的端口
  • name: 可选,端口名称
  • protocol: 可选,协议类型(TCP/UDP/SCTP),默认为TCP
  • port: 必填,Service暴露的端口
  • targetPort: 可选,目标Pod的端口,默认为port

二、Service类型详解

1. ClusterIP (默认类型)

代码语言:javascript
复制
spec:
  type: ClusterIP  # 可省略,默认值
  clusterIP: 10.0.0.10  # 可选,指定ClusterIP
  • 特点:仅在集群内部可访问
  • 适用场景:内部服务间通信
  • clusterIP: 可选,指定固定IP,设为“None”创建Headless Service

2. NodePort

代码语言:javascript
复制
spec:
  type: NodePort
  ports:
    - port: 80
      targetPort: 8080
      nodePort: 31080  # 可选,范围30000-32767
  • 特点:在每个节点上开放端口,外部可通过:访问
  • 适用场景:需要从集群外部访问的服务
  • nodePort: 可选,不指定则由Kubernetes自动分配

3. LoadBalancer

代码语言:javascript
复制
spec:
  type: LoadBalancer
  externalTrafficPolicy: Local
  loadBalancerIP: 203.0.113.10  # 可选,指定负载均衡器IP
  • 特点:在云环境中自动创建外部负载均衡器
  • 适用场景:公有云环境中的生产服务
  • externalTrafficPolicy: 可选,控制外部流量路由策略(Cluster/Local)

4. ExternalName

代码语言:javascript
复制
spec:
  type: ExternalName
  externalName: my.database.example.com
  • 特点:将服务映射到外部DNS名称
  • 适用场景:访问集群外部服务

三、高级配置字段

1. 多端口配置

代码语言:javascript
复制
spec:
  ports:
    - name: http
      protocol: TCP
      port: 80
      targetPort: 8080
    - name: https
      protocol: TCP
      port: 443
      targetPort: 8443
    - name: metrics
      protocol: TCP
      port: 9090
      targetPort: metrics-port  # 可引用Pod中定义的端口名称

2. 会话亲和性配置

代码语言:javascript
复制
spec:
  sessionAffinity: ClientIP
  sessionAffinityConfig:
    clientIP:
      timeoutSeconds: 3600  # 默认10800秒(3小时)
  • sessionAffinity: None(默认)或ClientIP
  • timeoutSeconds: 会话保持的超时时间

3. 外部IP配置

代码语言:javascript
复制
spec:
  externalIPs:
    - 192.168.1.100
    - 10.0.0.100
  • 指定外部IP地址列表,流量会被路由到Service

4. 健康检查相关配置

代码语言:javascript
复制
spec:
  publishNotReadyAddresses: false  # 默认值
  • publishNotReadyAddresses: 控制是否将未就绪的Pod发布到Service endpoints

四、完整配置示例

代码语言:javascript
复制
apiVersion: v1
kind: Service
metadata:
  name: ecommerce-service
  namespace: production
  labels:
    app: ecommerce
    tier: frontend
  annotations:
    service.beta.kubernetes.io/aws-load-balancer-type: "nlb"
spec:
  type: LoadBalancer
  selector:
    app: ecommerce
    tier: frontend
  ports:
    - name: http
      protocol: TCP
      port: 80
      targetPort: 8080
    - name: https
      protocol: TCP
      port: 443
      targetPort: 8443
  sessionAffinity: ClientIP
  sessionAffinityConfig:
    clientIP:
      timeoutSeconds: 7200
  externalTrafficPolicy: Local
  loadBalancerSourceRanges:
    - 203.0.113.0/24
    - 198.51.100.0/24
  healthCheckNodePort: 32080  # 指定健康检查端口

通过合理配置Service字段可以构建稳定、安全且高效的服务访问机制,为Kubernetes集群中的应用程序提供可靠的网络连接。

1、命名规范:使用 <应用名>-service 格式命名,如 user-service

2、端口配置:为每个端口指定名称,便于维护

3、标签选择器:使用多个标签精确匹配Pod,如 app: frontend, environment: prod

4、安全配置

  • 使用 loadBalancerSo urceRanges 限制访问IP范围
  • 生产环境避免使用NodePort直接暴露服务

5、性能优化:

  • 无状态服务设置 sessionAffinit y: None
  • 有状态服务适当调整 timeoutSeconds

如果你觉得这篇文章有用,欢迎点赞、转发、收藏、留言、推荐❤!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-09-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Nicholas与Pypi 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、Service基础字段解析
    • 1. 元数据字段
    • 2. 核心配置字段
  • 二、Service类型详解
    • 1. ClusterIP (默认类型)
    • 2. NodePort
    • 3. LoadBalancer
    • 4. ExternalName
  • 三、高级配置字段
    • 1. 多端口配置
    • 2. 会话亲和性配置
    • 3. 外部IP配置
    • 4. 健康检查相关配置
  • 四、完整配置示例
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档