一  服务与pod的发现

  1.1  服务发现pod是很显而易见的事情,通过简称pod的标签是否和服务的标签一致即可,但是pod是如何发现服务的呢?这个问题其实感觉比较多余,但是接下来你就可能不这么想了

  首先,众所周知,pod是有生命周期,并且受控于它的管控器(RC等),当节点从集群中离开,则管控器需要重新创建pod,此时RC和pod里面都无服务的信息,那么是如何发现服务的呢?

  1.2  一个简单的方法是通过环境变量的形式来发现服务,但是这种方式,只能是服务在pod之前创建,因为这样集群才能将服务的相关的信息以环境变量的形式写入进去

    我们先删除现有的pod,删除之后RC会感知到集群里面的pod数量不符合预期,于是会重新创建3个pod

[root@node01 Chapter05]# k delete po --all
pod "kubia-2z6kz" deleted
pod "kubia-m79rd" deleted
pod "kubia-trmbx" deleted [root@node01 Chapter05]# k get po
NAME READY STATUS RESTARTS AGE
kubia-44qx4 1/1 Running 0 63s
kubia-665qt 1/1 Running 0 63s
kubia-k9cw8 1/1 Running 0 63s

  

  1.3 之后查看任意的一个pod内部容器的环境变量可知

[root@node01 Chapter05]# k exec kubia-k9cw8 -- env
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=kubia-k9cw8
KUBERNETES_PORT_443_TCP_PROTO=tcp
KUBIA_SERVICE_HOST=10.109.29.64
KUBIA_SERVICE_PORT=80

KUBIA_PORT_80_TCP=tcp://10.109.29.64:80
KUBIA_PORT_80_TCP_ADDR=10.109.29.64
KUBERNETES_SERVICE_PORT_HTTPS=443
KUBERNETES_PORT_443_TCP_ADDR=10.96.0.1
KUBIA_PORT=tcp://10.109.29.64:80
KUBERNETES_SERVICE_PORT=443
KUBERNETES_SERVICE_HOST=10.96.0.1
KUBERNETES_PORT_443_TCP=tcp://10.96.0.1:443
KUBERNETES_PORT_443_TCP_PORT=443
KUBIA_PORT_80_TCP_PROTO=tcp
KUBIA_PORT_80_TCP_PORT=80
KUBERNETES_PORT=tcp://10.96.0.1:443
NPM_CONFIG_LOGLEVEL=info
NODE_VERSION=7.9.0
YARN_VERSION=0.22.0
HOME=/root

  环境变量如红色字体标注出来一致,可以通过环境的变量的形式来发现服务的存在

  1.4 通过环境变量的形式发现服务总觉得有些不尽人意,何不尝试使用DNS的形式发现服务

事实上,kubernets确实允许通过DNS的形式来访问服务,并且这种方式比环境变量的形式要优秀很多

  我们首先来看集群中运行DNS服务的在哪里

[root@node01 Chapter05]# k get po --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE
default kubia-44qx4 1/1 Running 0 13m
default kubia-665qt 1/1 Running 0 13m
default kubia-k9cw8 1/1 Running 0 13m
kube-system coredns-fb8b8dccf-gfkss 1/1 Running 1 3d3h
kube-system coredns-fb8b8dccf-tjr6m 1/1 Running 1
3d3h
kube-system etcd-master 1/1 Running 1 3d3h
kube-system kube-apiserver-master 1/1 Running 0 3d3h
kube-system kube-controller-manager-master 1/1 Running 1 3d3h
kube-system kube-flannel-ds-b95br 1/1 Running 0 3d2h
kube-system kube-flannel-ds-mwlgl 1/1 Running 0 3d3h
kube-system kube-flannel-ds-w4mvw 1/1 Running 0 3d2h
kube-system kube-proxy-2h9ck 1/1 Running 0 3d3h
kube-system kube-proxy-qprh7 1/1 Running 0 3d2h
kube-system kube-proxy-z6nwk 1/1 Running 0 3d2h
kube-system kube-scheduler-master 1/1 Running 1 3d3h

 

 如红色字体显示,他在kube-system这个命名空间里,并且为所有的pod提供DNS服务那么他又是如何做到的呢,我们看下/etc/resolv.conf

[root@node01 Chapter05]# k get po
NAME READY STATUS RESTARTS AGE
kubia-44qx4 1/1 Running 0 16m
kubia-665qt 1/1 Running 0 16m
kubia-k9cw8 1/1 Running 0 16m [root@node01 Chapter05]# k exec kubia-k9cw8 -- cat /etc/resolv.conf
nameserver 10.96.0.10
search default.svc.cluster.local svc.cluster.local cluster.local
options ndots:5 [root@node01 Chapter05]# k exec kubia-665qt -- cat /etc/resolv.conf
nameserver 10.96.0.10
search default.svc.cluster.local svc.cluster.local cluster.local
options ndots:5 [root@node01 Chapter05]# k exec kubia-44qx4 -- cat /etc/resolv.conf
nameserver 10.96.0.10
search default.svc.cluster.local svc.cluster.local cluster.local
options ndots:5

每个pod里面/etc/resolv.conf都已经有了相关的配置于是访问服务就变得更加简单了

  1.5  可以直接通过DNS的形式进行访问

root@kubia-44qx4:/# curl -s http://kubia.default.svc.cluster.local
You've hit kubia-k9cw8

root@kubia-44qx4:/# curl -s http://kubia.default
You've hit kubia-665qt

root@kubia-44qx4:/# curl -s http://kubia
You've hit kubia-k9cw8

注意:.svc.cluster.local这个是集群设置的,如果在相同的命名空间里面甚至可以直接用svc的名称加端口号访问

在不同的命令空间的svc只需要添加服务名称加命名空间和端口号(在同一个集群)

kubernets之服务发现的更多相关文章

  1. Consul 服务注册与服务发现

    上一篇:Mac OS.Ubuntu 安装及使用 Consul 1. 服务注册 对 Consul 进行服务注册之前,需要先部署一个服务站点,我们可以使用 ASP.NET Core 创建 Web 应用程序 ...

  2. etcd:用于服务发现的键值存储系统

    etcd是一个高可用的键值存储系统,主要用于共享配置和服务发现.etcd是由CoreOS开发并维护的,灵感来自于 ZooKeeper 和 Doozer,它使用Go语言编写,并通过Raft一致性算法处理 ...

  3. 我是服务的执政官-服务发现和注册工具consul简介

    服务发现和注册 我们有了两个服务.服务A的IP地址是192.168.0.1,端口9001,服务B的IP地址192.168.0.2,端口9002.我们的客户端需要调用服务A和服务B,我们只需要在配置文件 ...

  4. k8s DNS 服务发现的一个坑

    按照官当文档,以及大家的实践进行k8s dns 服务发现搭建还是比较简单的,但是会有一个因为系统默认dns 配置造成的一个问题 1. linux  默认dns 配置在 /etc/resolv.conf ...

  5. Kubernetes如何使用kube-dns实现服务发现

    大纲: •       Kubernetes中如何发现服务 •       如何发现Pod提供的服务 •       如何使用Service发现服务 •       如何使用kube-dns发现服务 ...

  6. Consul 服务发现和配置

    Service discovery and configuration made easy. Distributed, highly available, and datacenter-aware. ...

  7. 服务发现之 Etcd VS Consul

    抄自这里 *********************************************************************************************** ...

  8. SpringCloud+Consul 服务注册与服务发现

    SpringCloud+Consul 服务注册与服务发现 1. 服务注册: 在Spring.factories有一段: # Discovery Client Configuration org.spr ...

  9. 服务发现:Zookeeper vs etcd vs Consul

    [编者的话]本文对比了Zookeeper.etcd和Consul三种服务发现工具,探讨了最佳的服务发现解决方案,仅供参考. 如果使用预定义的端口,服务越多,发生冲突的可能性越大,毕竟,不可能有两个服务 ...

随机推荐

  1. HBase删除数据

    hbase官方文档中描述了,hbase删除数据可以总结为下面三种(Java API有很多接口,可以总结下面的几种): 删除一个列的指定版本 删除一个列的所用版本 删除指定列族的所有列 hbase删除数 ...

  2. js下 Day16、正则案例

    一.封装格式化日期 功能思路分析: \1. 第一个参数format表示指定的时间格式 \2. 第二个参数date为指定的时间(可以不传,默认当前时间) \3. 获取第二个参数中指定时间的年月日时分秒 ...

  3. Impala的特点

    Impala的特点 0. 原理 基于内存的分析框架. 1.为什么会有Impala? hive进行计算太慢了,于是就有了Impala,Impala可以理解为是hive的内存版本. 2.Impala的优点 ...

  4. Web常用编码以及攻击绕过笔记

    一.URL编码形式:"%"加上ASCII码(先将字符转换为两位ASCII码,再转为16进制),其中加号"+"在URL编码中和"%20"表示一 ...

  5. Springboot接入RabbitMQ详细教程

    本文适用于对 RabbitMQ 有所了解的人,在此不讨论MQ的原理,只讨论如何接入.其实Spring Boot 集成 RabbitMQ 非常简单,本文章使用的是Spring Boot 提供了sprin ...

  6. Stream并行流详解

    1.并行与并发的区别 在说到并行的时候,相信很多人都会想到并发的概念.那么并行和并发两者一字之差,有什么区别呢? 并行:多个任务在同一时间点发生,并由不同的cpu进行处理,不互相抢占资源 并行: 并发 ...

  7. 磁盘IO工作机制

    磁盘IO工作机制 ref: <深入分析java web 技术内幕> by:许令波 几种访问文件的方式 文件读取和写入的 IO 操作都是调用操作系统提供的接口,因为磁盘设备是由操作系统管理的 ...

  8. Java获取X509证书里的指纹(SHA-1)从pxf文件里面

    直接通过流去获取pxf后缀文件的内容,指纹通过X509才能获取.String keyStorefile = "pfx文件地址";String strPassword = " ...

  9. [Deep Learning] 神经网络编程基础 (Basics of Neural Network Programming) - 逻辑回归-梯度下降-计算图

    在神经网络中,假如有m个训练集,我们想把他们加入训练,第一个想到得就是用一个for循环来遍历训练集,从而开始训练.但是在神经网络中,我们换一个计算方法,这就是 前向传播和反向传播. 对于逻辑回归,就是 ...

  10. 如果对象为空,java函数String.valueOf(Object obj)返回"null"字符串

    源码如下: public static String valueOf(Object obj) { return (obj == null) ? "null" : obj.toStr ...