当前位置: 首页 > news >正文

k8s之Headless浅谈 - 实践

Headless Services 简介

有时不需要或不想要负载均衡,以及单独的 Service IP。 遇到这种情况,可以通过指定 Cluster IP(spec.clusterIP)的值为 “None” 来创建 Headless Service。

您可以使用 headless Service 与其他服务发现机制进行接口,而不必与 Kubernetes 的实现捆绑在一起。

对这 headless Service 并不会分配 Cluster IP,kube-proxy 不会处理它们,而且平台也不会为它们进行负载均衡和路由。 DNS 如何实现自动配置,依赖于 Service 是否定义了 selector。

Lable Secector:

  • 配置 Selector:对定义了 selector 的 Headless Service,Endpoint 控制器在 API 中创建了 Endpoints 记录,并且修改 DNS 配置返回 A 记录(地址),通过这个地址直接到达 Service 的后端 Pod上。见下图:

  • 不配置 Selector:对没有定义 selector 的 Headless Service,Endpoint 控制器不会创建 Endpoints 记录。

Service(iptables 代理模式)简介

这种模式,kube-proxy 会监视 Kubernetes 控制节点对 Service 对象和 Endpoints 对象的添加和移除。 对每个 Service,它会安装 iptables 规则,从而捕获到达该 ServiceclusterIP 和端口的请求,进而将请求重定向到 Service 任意一组 backend pod 中。 对于每个 Endpoints 对象,它也会安装 iptables 规则,这个规则会选择一个 backend pod 组合。

默认的策略是,kube-proxy 在 iptables 模式下随机选择一个 backend pod

下面是一个简图:

Headless Services 创建

$ vim headless_service.yaml
$ kubectl apply -f headless_service.yaml

headless_service.yaml 配置如下

apiVersion: v1
kind: Service
metadata:
name: nginx-test
labels:
app: nginx_test
spec:
ports:
- port: 80
name: nginx-web
# clusterIP 设置为 None
clusterIP: None
selector:
app: nginx_test
---
apiVersion: apps/v1beta1
kind: StatefulSet
metadata:
name: nginx-web
spec:
serviceName: "nginx-test"
replicas: 2
template:
metadata:
labels:
app: nginx_test
spec:
containers:
- name: nginx-test
image: nginx:1.11
ports:
- containerPort: 80
name: nginx-web

Headless Services 验证

# 查看 statefulsets nginx-web
$ kubectl get statefulsets nginx-web
NAME        READY   AGE
nginx-web   2/2     93m
# 查看 pods 
$ kubectl get pods -o wide | grep nginx-web
nginx-web-0                         1/1     Running   0          96m    192.168.40.103   it-zabbix   <none>           <none>nginx-web-1                         1/1     Running   0          96m    192.168.40.96    it-zabbix   <none>           <none># 显示 nginx-test Headless Services 详细信息$ kubectl describe svc nginx-testName:              nginx-testNamespace:         defaultLabels:            app=nginx_testAnnotations:       kubectl.kubernetes.io/last-applied-configuration:{"apiVersion":"v1","kind":"Service","metadata":{"annotations":{},"labels":{"app":"nginx_test"},"name":"nginx-test","namespace":"default"},...Selector:          app=nginx_testType:              ClusterIPIP:                NonePort:              nginx-web  80/TCPTargetPort:        80/TCPEndpoints:         192.168.40.103:80,192.168.40.96:80Session Affinity:  NoneEvents:            <none># 测试 service 域名是否解析出两个 pod ip$ nslookup nginx-test.default.svc.cluster.local 192.168.16.2Server:		192.168.16.2Address:	192.168.16.2#53Name:	nginx-test.default.svc.cluster.localAddress: 192.168.40.103Name:	nginx-test.default.svc.cluster.localAddress: 192.168.40.96# 测试 pod 域名是否解析出对应的 pod ip$ nslookup nginx-web-0.nginx-test.default.svc.cluster.local 192.168.16.2Server:		192.168.16.2Address:	192.168.16.2#53Name:	nginx-web-0.nginx-test.default.svc.cluster.localAddress: 192.168.40.103$ nslookup nginx-web-1.nginx-test.default.svc.cluster.local 192.168.16.2Server:		192.168.16.2Address:	192.168.16.2#53Name:	nginx-web-1.nginx-test.default.svc.cluster.localAddress: 192.168.40.96

Headless Services 应用场景

  • 第一种:自主选择权,有时候 client 想自己来决定使用哪个Real Server,可以通过查询DNS来获取 Real Server 的信息。
  • 第二种:Headless Service 的对应的每一个 Endpoints,即每一个Pod,都会有对应的DNS域名,这样Pod之间就可以互相访问

运维干货分享

http://www.jsqmd.com/news/91913/

相关文章:

  • 想在宁晋县老家农村盖房子,靠谱的自建房公司口碑推荐。邢台市宁晋县自建房公司/机构权威测评推荐排行榜 - 苏木2025
  • 开拓者正义之怒:动物伙伴终极培养手册
  • 基于STM32F030系列单片机的源程序
  • 24、Vim扩展与图形化使用指南
  • 巨鹿县农村自建房找谁好?邢台市巨鹿县自建房公司/机构深度评测口碑推荐榜 - 苏木2025
  • 简历制作痛点终结者:Awesome-CV如何帮你打造专业双语简历
  • 在 Vue3 项目中实现定时刷新 vxe-table 数据,并在页面不可见时暂停刷新
  • 25、定制gvim的滚动条、菜单和工具栏
  • 7个让你重新爱上阅读的理由:Readest如何拯救你的碎片化时间?
  • DDD从0到企业级:迭代式学习 (共17章)之 四
  • 9、UNIX系统文件管理与POSIX标准解析
  • 民宿平台管理|基于Java + vue民宿平台管理系统(源码+数据库+文档)
  • 打造企业级AI助手:LobeChat插件系统深度使用教程
  • 5步构建高效强化学习环境:从零掌握gym空间设计实战
  • 2025智能家居更新策略:3步规避风险+紧急回滚技巧
  • 27、Vim自动缩进与关键字补全功能详解
  • 10、深入探索Shell字符串操作符:功能、应用与技巧
  • 助农农商|基于Java+ vue助农农商系统(源码+数据库+文档)
  • OptiScaler终极使用教程:快速掌握游戏画质优化核心技术
  • 绿色算力革命:液冷技术如何让数据中心能耗降低 30% 以上?
  • 超市管理|基于Java+ vue超市管理系统(源码+数据库+文档)
  • 腾讯开源Hunyuan-7B:256K超长上下文+快慢思考重塑大模型应用边界
  • 11、Korn Shell 编程:整数运算与变量使用
  • 如何用3个步骤构建超越传统搜索引擎的向量数据库系统?
  • 二手物品交易|基于Java + vue二手物品交易系统(源码+数据库+文档)
  • 学生选课|基于Java + vue学生选课系统(源码+数据库+文档)
  • 第七十一篇:单元测试与集成测试:unittest, pytest深度实战与Python最佳实践
  • 18、Unix系统网络服务配置与接口配置指南
  • 如何解决2.5D游戏开发中的深度感知难题?实战案例深度剖析
  • 37、Vile编辑器:功能特性与使用指南