美文网首页
k8s-服务发现

k8s-服务发现

作者: xyz098 | 来源:发表于2019-10-10 07:59 被阅读0次

3个概念pod、endpoint、service

  • pod

    一组container组成,被RC(replicationController)、Deployment、DaemonSet、Job、StatefulSet管理

  • endpoint

    每个pod都提供一个独立的endpoint(PodIP + ContainerPort)以被客户端访问

  • service

    由多个pod副本组成,通过selector来选择。相同label的pod组成一个servie。

    解决问题:service对于的ClusterIP在service的生命周期内不会变化。而pod的endpoint会随pod的改变而改变。

k8s的服务发现机制

一般分布式系统服务发现实现:服务提供API接口等待抓取数据实现。

k8s通过DNS系统实现。解决service的名字与clusterIP的映射。

DNS系统的组件
  • etcd: DNS存储(域名与IP)

    key: /dns服务名(skydns)/local/cluster/namespace/serviceName

    value: 对应clusterIP

  • kube2sky:通过k8s master获取都所有service注册到etcd

  • skyDNS: k8s里的DNS域名解析服务器 (有一个service)

  • healthz: 提供对kube2sky的健康检测

分两步实现
  • kube2sky通过master的获取与更新所有service的映射数据到etcd的数据。

  • pod配置skydns到/etc/resolv.conf,当需要访问其他其他service(对应其他pod)时,先通过skydns解析(去etcd获取)到对应的clusterIP,再由kube-proxy转发到pod。

配置注意
  • kube2sky启动参数 --kube_master_url=http://k8s-master-ip:port --domain=xxx(一般为cluster.local)

  • node节点kubelet启动参数 --cluseter-dns=DNS服务的clusterIP --cluster_domain=cluster.local

  • kube2sky为service生成2条记录: service_name.namespace_name.domainservice_name.namespace_name.svc.domain

k8s引入其他DNS

  • 存根域: 公司自建服务发现系统(如cosul)完成域名解析
  • 外部上游域名:8.8.8.8 (google的DNS服务)

用configMap配置存根域和上游DNS服务

apiVersion: v1
kind: ConfigMap
.......
data:
stubDomains: |       # 存根域
  {"out-of.kuberneters": ["10.10.10.5"]}
upstreamNameservers: |   # 上游dns
  ["8.8.8.8","8.8.8.4"]
解析过程

k8s的pod支持两种策略:Default、ClusterFirst

  • Default : 域名解析配置从pod的/etc/resolv.conf继承
  • ClusterFirst: Dns查询被发送到kube-dns(skydns)服务,以域名后缀进行服务名解析

当pod的dnsPolicy为CulsterFirst时,域名解析会先发送到kube-dns的DNS缓存层,检查域名后缀,为cluster.local由kube-dns解析,为out-of.kuberneters的由10.10.10.5解析,其他后缀有上游dns8.8.8.8解析。

tips:可以使用dnsmasq模拟dns服务器

so,dns解决了servicename与clusterIP的映射关系,service实现了culsterIP代理相同一组pod。因为pod的endpoint会随着创建销毁而变化,这样设计能够一定程度上保证pod对应业务的可用性。 类似:DNS解析某个网站,网站由nginx反向代理后段服务。

相关文章

  • k8s-服务发现

    3个概念pod、endpoint、service pod一组container组成,被RC(replication...

  • k8s-发现POD

    在一个已存在POD容器上执行命令k exec kubia-752jx -- curl -s http://10.1...

  • 服务发现:服务端服务发现

    背景 服务通常需要调用其他服务。单体应用中,服务通过语言级别的方法或者过程调用另外的服务。在传统的分布式部署中,服...

  • k8s-调度算法

    k8s-调度算法 预选算法,过滤nodes 优选算法,对nodes打分 ps. scheduler_algorit...

  • k8s-架构中各个组件介绍

    k8s-架构中各个组件介绍[https://www.cnblogs.com/smail-bao/p/1199592...

  • 服务发现

    参考资料

  • 服务发现

    服务发现 服务发现就是想要了解集群中是否有进程在监听udp或tcp端口,并且通过名字就可以进行查找和连接 解决服务...

  • 服务发现

    一、什么是服务发现 在传统的系统部署中,服务运行在一个固定的已知的 IP 和端口上,如果一个服务需要调用另外一个服...

  • 服务发现

    参考资料http://dockone.io/article/667 (Zookeeper vs etcd vs C...

  • 服务发现

    参考老钱 服务发现的基本原理服务发现聊聊 Node.js RPC(二)— 服务发现 在传统的系统部署中,服务运行在...

网友评论

      本文标题:k8s-服务发现

      本文链接:https://www.haomeiwen.com/subject/utxopctx.html