初识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的更多相关文章

  1. 从零开始入门 | Kubernetes 中的服务发现与负载均衡

    作者 | 阿里巴巴技术专家  溪恒 一.需求来源 为什么需要服务发现 在 K8s 集群里面会通过 pod 去部署应用,与传统的应用部署不同,传统应用部署在给定的机器上面去部署,我们知道怎么去调用别的机 ...

  2. Kubernetes 中的服务发现与负载均衡

    原文:https://www.infoq.cn/article/rEzx9X598W60svbli9aK (本文转载自阿里巴巴云原生微信公众号(ID:Alicloudnative)) 一.需求来源 为 ...

  3. 浅析Kubernrtes服务类型(Service Types)

    先上图 在Kubernetes集群中,service通过标签选择器选着对应的pod,然后对请求进行转发,看个动画,能直接了当体会到便签选择器 pod,endpoints,service三者关系 1.举 ...

  4. Kubernetes中Service的使用

    目录 简介 1. Service资源定义 1.1 Service Type ClusterIP 无头service NodePort sessionAffinity实现源地址session绑定 简介 ...

  5. kubernetes的headless service介绍

    headless service是一个特殊的ClusterIP类service,这种service创建时不指定clusterIP(--cluster-ip=None),因为这点,kube-proxy不 ...

  6. Kubernetes系列之理解K8s Service的几种模式

    今天给大家介绍下k8s的service的几种访问模式. 概述 我们知道pod的ip不是固定的,是根据所在宿主机的docker0网卡生成的,每次重启,更新,调度等情况IP都会变,那pod与pod之间需要 ...

  7. 如何将云原生工作负载映射到 Kubernetes 中的控制器

    作者:Janakiram MSV 译者:殷龙飞 原文地址:https://thenewstack.io/how-to-map-cloud-native-workloads-to-kubernetes- ...

  8. Kubernetes 中的核心组件与基本对象概述

    Kubernetes 是 Google 基于 Borg 开源的容器编排调度,用于管理容器集群自动化部署.扩容以及运维的开源平台.作为云原生计算基金会 CNCF(Cloud Native Computi ...

  9. StatefulSet: Kubernetes 中对有状态应用的运行和伸缩

    在最新发布的 Kubernetes 1.5 我们将过去的 PetSet 功能升级到了 Beta 版本,并重新命名为StatefulSet.除了依照社区民意改了名字之外,这一 API 对象并没有太大变化 ...

随机推荐

  1. CentOS-Docker安装RabbitMQ集群(rabbitmq:3.7.16-management)

    准备工作 1.机器资源(分别安装docker环境) 建议机器配置: centos7.x 4G及以上 100GB及以上 2核及以上 192.168.1.101 192.168.1.102 192.168 ...

  2. Docker:docker搭建redis6.0.8集群

    下载redis镜像 #拉取镜像 docker pull redis:6.0.8 查看版本 #查看版本 docker inspect redis 生成redis.conf配置文件 #在 /home/re ...

  3. linux 生成密钥

    p.p1 { margin: 0; font: 16px "Helvetica Neue" } span.s1 { font: 16px ".PingFang SC&qu ...

  4. [开源名人访谈录] Philippe Gerum

    译至:http://www.advogato.org/article/803.html 译者按:这篇采访的时间很早,但有助于你了解Xenomai相关的背景. 这是对菲利普格鲁姆,ADEOS项目的共同领 ...

  5. MRCTF (re和crypto)wp

    RE: 一.PixelShooter(这题比赛我居然没看,靠,血亏,所以做不出来就不要一直死怼,这题挺好写的,) unity一般是用c#写的,刚好又是apk,可以用dnspy来反编译看看,在源码中找到 ...

  6. MindInsight:一款基于MindSpore框架的训练可视化插件

    技术背景 在深度学习或者其他参数优化领域中,对于结果的可视化以及中间网络结构的可视化,也是一个非常重要的工作.一个好的可视化工具,可以更加直观的展示计算结果,可以帮助人们更快的发掘大量的数据中最有用的 ...

  7. docker起不来报错:Failed to start Docker Application Container Engine.

    报错信息如下: [root@localhost localdisk]# systemctl restart docker Job for docker.service failed because t ...

  8. MIT6.828 Lab4 Preemptive Multitasking(下)

    Lab4 Preemptive Multitasking(下) lab4的第二部分要求我们实现fork的cow.在整个lab的第一部分我们实现了对多cpu的支持和再多系统环境中的切换,但是最后分析的时 ...

  9. 锐捷路由器 RSR20-X-28

    学习帮助视频 Ruijie#show run | in natip nat outsideip nat insideip nat pool NAT_POOL prefix-length 24ip na ...

  10. C语言:宏定义

    #include <stdio.h> #define PI 3.14159265454454235432453245 main() { printf("%f\n",PI ...