kubernetes中headless类型的service
初识headless类型的service
第一次使用rancher搭建了一个k8s集群,迫不及待地按照官方文档开始新增workload,ingress进行测试,使用自己地代码自己打包的镜像进行简单的测试。在新增一个ingressA之后,在service discovery tab中看到自动也给我新建了一个serviceA,自己在集群中再启动了一个ubuntu的镜像,尝试着直接curl serviceA 却发现一直报错80端口拒绝访问。我的后端服务是8080端口,可是在ingressA和这个servuceA中我明明都加了端口映射的,即targetPort=8080,port=80,serviceA的类型也是ClusterIP的,按照kubernetes的官方介绍来看我在集群内部访问这个服务应该是用80端口才对,然而却一直报80端口拒绝访问。然后使用curl serviceA:8080,竟然意外地访问通了!然后使用kubectl describe svc serviceA查看详细信息的时候才发现这个service的clusterip竟然是none。接着在kubernetes官方查看service的描述,才发现一个关键词:headless
开始研究headless类型的service
查看官方文档,发现这种类型的service主要是用来返回一系列ip地址的,所谓的这种类型的service只是新增了一条dns记录,不会进行负载均衡,也不会走kubeproxy,似懂非懂的查找了一些列资料之后终于找到了一篇描述的比较详细的文章https://medium.com/swlh/discovering-running-pods-by-using-dns-and-headless-services-in-kubernetes-7002a50747f4
headless类型的service之我的理解

即新增这种类型的service的时候,会在集群内部新增一条dns记录,这条dns记录表示通过这个服务名字可以访问到的后端服务ip地址(一组pod的内部ip地址,endpoints),通过nslooklook serviceA 或者dig +search serviceA命令可以查看到该条dns记录
当时也还是不明白返回这样一条dns记录有什么用,后边才明白,在程序内部可以通过这个服务名称进行dns解析得到一组ip地址,然后在自己的程序内部进行比如负载均衡流量控制之类的操作,比如返回的有三个pod的redis的地址,redis客户端程序可以自定义连接建立的算法,自己决定某个时刻连接哪个ip的服务。有的时候恰好就有这种的需求,比如redis、mongodb集群,这种需要客户端自定义负载均衡算法和管理连接,瞬间清晰了。
System.Net.IPAddress[] ipAddresses = Dns.GetHostAddresses("serviceA");
string connectionString = "";
foreach(IPAddress in ipAddresses)
{
if(connectionString = "")
connectionString = "mongodb://";
else
connectionString += ",";
connectionString += $"{IPAddress.ToString()}:27017";
}
connectionString += "/database";
var client = new MongoClient(connectionString);
kubernetes中headless类型的service的更多相关文章
- 从零开始入门 | Kubernetes 中的服务发现与负载均衡
作者 | 阿里巴巴技术专家 溪恒 一.需求来源 为什么需要服务发现 在 K8s 集群里面会通过 pod 去部署应用,与传统的应用部署不同,传统应用部署在给定的机器上面去部署,我们知道怎么去调用别的机 ...
- Kubernetes 中的服务发现与负载均衡
原文:https://www.infoq.cn/article/rEzx9X598W60svbli9aK (本文转载自阿里巴巴云原生微信公众号(ID:Alicloudnative)) 一.需求来源 为 ...
- 浅析Kubernrtes服务类型(Service Types)
先上图 在Kubernetes集群中,service通过标签选择器选着对应的pod,然后对请求进行转发,看个动画,能直接了当体会到便签选择器 pod,endpoints,service三者关系 1.举 ...
- Kubernetes中Service的使用
目录 简介 1. Service资源定义 1.1 Service Type ClusterIP 无头service NodePort sessionAffinity实现源地址session绑定 简介 ...
- kubernetes的headless service介绍
headless service是一个特殊的ClusterIP类service,这种service创建时不指定clusterIP(--cluster-ip=None),因为这点,kube-proxy不 ...
- Kubernetes系列之理解K8s Service的几种模式
今天给大家介绍下k8s的service的几种访问模式. 概述 我们知道pod的ip不是固定的,是根据所在宿主机的docker0网卡生成的,每次重启,更新,调度等情况IP都会变,那pod与pod之间需要 ...
- 如何将云原生工作负载映射到 Kubernetes 中的控制器
作者:Janakiram MSV 译者:殷龙飞 原文地址:https://thenewstack.io/how-to-map-cloud-native-workloads-to-kubernetes- ...
- Kubernetes 中的核心组件与基本对象概述
Kubernetes 是 Google 基于 Borg 开源的容器编排调度,用于管理容器集群自动化部署.扩容以及运维的开源平台.作为云原生计算基金会 CNCF(Cloud Native Computi ...
- StatefulSet: Kubernetes 中对有状态应用的运行和伸缩
在最新发布的 Kubernetes 1.5 我们将过去的 PetSet 功能升级到了 Beta 版本,并重新命名为StatefulSet.除了依照社区民意改了名字之外,这一 API 对象并没有太大变化 ...
随机推荐
- 资源:Hadoop安装包下载路径
下载路径 Hadoop所有版本:http://archive.apache.org/dist/hadoop/common/
- Hibernate框架(二)POJO对象的操作
POJO对象其实就是我们的实体,这篇博客总结一下框架对POJO对象对应数据库主键的生成策略,和一些对POJO对象的简单增删改查的操作. 一,Hibernate框架中主键的生成策略有三种方式: 1,数据 ...
- 字典翻译@Dict
1.编写翻译字典@Dict /** * 数据字典翻译注解 */ @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) publ ...
- docker起不来报错:Failed to start Docker Application Container Engine.
报错信息如下: [root@localhost localdisk]# systemctl restart docker Job for docker.service failed because t ...
- ESP32的ULP 协处理器笔记
1.ULP 协处理器是一个功耗极低的协处理器设备,无论主 CPU 是处于正常运行模式还是 Deep-sleep 模式,ULP 协处理器都可以独立运行.超低功耗协处理器的补充使得 ESP32 能够胜任一 ...
- PID算法控制直流电机笔记
1.将偏差的比例.积分和微分通过线性组合构成控制量,用这一控制量对被控对象进行控制,这样的控制器称为PID控制器.简单说就是根据系统的误差,利用比例.积分.微分计算出控制量进行控制. 2.为什么需要P ...
- [Qt]-打包程序为Debian的deb格式的安装包
参考:https://segmentfault.com/a/1190000005029385 参考:UnityLaunchersAndDesktopFiles deb是Debian Linux的软件包 ...
- MIT6.828 Lab4 Preemptive Multitasking(下)
Lab4 Preemptive Multitasking(下) lab4的第二部分要求我们实现fork的cow.在整个lab的第一部分我们实现了对多cpu的支持和再多系统环境中的切换,但是最后分析的时 ...
- 基于YARP实现的FastGithub
前言 最近开源的两个项目,先是FastGithub,旨在解决访问github抽风的问题.然后开发HttpMouse项目,基于yarp的http公网反向代理到内网的服务端与客户端库,在开发HttpMou ...
- M1卡分类
M1卡复制前文说到,每一张M1卡的0扇区0块都是出厂时厂商赋予的绝对地址块,我们无法在M1卡内直接修改它. 说到这不得不提一下M1卡的复制子卡--UID卡,FUID卡,CUID卡. UID卡UID卡是 ...