当前位置: 首页 > 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.gsyq.cn/news/102318.html

相关文章:

  • 想在宁晋县老家农村盖房子,靠谱的自建房公司口碑推荐。邢台市宁晋县自建房公司/机构权威测评推荐排行榜 - 苏木2025
  • 巨鹿县农村自建房找谁好?邢台市巨鹿县自建房公司/机构深度评测口碑推荐榜 - 苏木2025
  • 民宿平台管理|基于Java + vue民宿平台管理系统(源码+数据库+文档)
  • OptiScaler终极使用教程:快速掌握游戏画质优化核心技术
  • 绿色算力革命:液冷技术如何让数据中心能耗降低 30% 以上?
  • 超市管理|基于Java+ vue超市管理系统(源码+数据库+文档)
  • 11、Korn Shell 编程:整数运算与变量使用
  • 37、Vile编辑器:功能特性与使用指南
  • 社论:「LibreOJ Round #9」Menci 的序列
  • python练习
  • 医学影像智能分析:Python实践中的3大突破性技术
  • Iced框架UI性能优化:构建无卡顿界面的并发渲染技术
  • 互联网大厂都在哪些顶会上发论文?AI/ML/CV/NLP/推荐系统全解析
  • Bruno完美迁移Postman集合:告别方法名大小写困扰的终极指南
  • Spring Boot AOP(一) 入门与核心概念
  • 43、vi 编辑器使用指南:常见问题与网络资源
  • 如何在5分钟内为你的ESP32设备定制专属语音唤醒词
  • 腾讯开源HunyuanVideo-I2V:图像转视频技术的新突破与行业影响
  • Apache Flink 2.0 Exactly-Once语义优化与状态管理深度解析
  • vue基于Spring Boot框架家庭装修 家装 装饰工程管理系统_u720358w
  • Wan2.2开源模型:让普通人也能制作专业级角色动画的终极指南
  • 水下场景3D重建技术突破:SeaThru-NeRF如何应对光线折射与散射挑战
  • WAN2.2-14B-Rapid-AllInOne多模态视频生成实战指南
  • 5、符号表与索引生成器:从文本索引到C语言交叉引用
  • 2025AI提示词设计实战:从零到精通的完整指南
  • VibeVoice:重新定义智能语音交互的边界与想象
  • 如何快速掌握ms.js:面向开发者的完整时间转换指南
  • vue基于Spring Boot框架游戏攻略赛事视频系统的设计与实现_p5059q02
  • Hazelcast与Kafka集成实战:构建毫秒级实时数据处理架构
  • Ruffle字体问题终极解决方案:3步告别乱码困扰