前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【K8s】Kubernetes 服务发现之 Headless Service

【K8s】Kubernetes 服务发现之 Headless Service

作者头像
行者Sun
发布2024-09-11 18:50:51
3210
发布2024-09-11 18:50:51
举报
文章被收录于专栏:Kubernetes

以下内容均来自个人笔记并重新梳理,如有错误欢迎指正!

如果对您有帮助,烦请点赞、关注、转发!如果您有其他想要了解的,欢迎私信联系我~

基本介绍

在 Kubernetes 中,Headless Service(无头服务)是一种特殊的服务发现机制,允许用户直接访问集群中的 Pod 实例,而不是通过单一的 ClusterIP 负载均衡到 Endpoint(Pod)。

Headless Service 接收的请求不需要经过 kube-proxy 转发,也不会有负载均衡和路由规则。

Headless Service 适用场景如下:

  • 有状态应用:Headless Service 可以提供稳定的访问能力,最常用的就是结合 StatefulSet 部署有状态应用,使其拥有固定的 Pod 名称和 PVC 名称
  • 分布式系统:需要直接与集群中的每个 Pod 实例进行通信,如分布式数据库或分布式缓存
  • 测试和调试:需要直接访问集群中特定的 Pod 实例进行调试

工作原理

  • 无单一 IP:Headless Service 不会为 Service 对象分配单一的 ClusterIP 地址,而是为 Service 对象的每个 Pod 分配一个 DNS 记录(格式为 {pod_name}.{service_name}.{namespace}.svc.cluster.local)
  • DNS 解析:当使用 Headless Service 的名称进行 DNS 查询时,Kubernetes 的 DNS 服务会返回所有 Pod 的 IP 地址列表,而不是单一的 ClusterIP
  • 服务选择:Headless Service 使用选择器(Selector)来确定哪些 Pod 属于该 Service,与标准 Service 对象的工作方式相同
  • 无端口映射:Headless Service 不会自动进行端口映射,需要在 Service 对象的资源清单中明确指定端口

资源清单(示例)

代码语言:javascript
复制
# demo-servcie.yaml
apiVersion: v1
kind: Service
metadata:
  name: demo-service
spec:
  selector:
    app: web
  type: ClusterIP
  clusterIP: None              # 关键点,字段值必须设置为 None
  ports:
  - name: http
    protocol: TCP
    port: 80
    targetPort: 8080

从资源清单可见,若将一个 ClusterIP 类型的 Service 对象定义为 Headless Service,只需要指定其 clusterIP 字段的值为 None 即可。

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

本文分享自 实施运维知识交流 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档