kubernets之服务发现
一 服务与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之服务发现的更多相关文章
- Consul 服务注册与服务发现
上一篇:Mac OS.Ubuntu 安装及使用 Consul 1. 服务注册 对 Consul 进行服务注册之前,需要先部署一个服务站点,我们可以使用 ASP.NET Core 创建 Web 应用程序 ...
- etcd:用于服务发现的键值存储系统
etcd是一个高可用的键值存储系统,主要用于共享配置和服务发现.etcd是由CoreOS开发并维护的,灵感来自于 ZooKeeper 和 Doozer,它使用Go语言编写,并通过Raft一致性算法处理 ...
- 我是服务的执政官-服务发现和注册工具consul简介
服务发现和注册 我们有了两个服务.服务A的IP地址是192.168.0.1,端口9001,服务B的IP地址192.168.0.2,端口9002.我们的客户端需要调用服务A和服务B,我们只需要在配置文件 ...
- k8s DNS 服务发现的一个坑
按照官当文档,以及大家的实践进行k8s dns 服务发现搭建还是比较简单的,但是会有一个因为系统默认dns 配置造成的一个问题 1. linux 默认dns 配置在 /etc/resolv.conf ...
- Kubernetes如何使用kube-dns实现服务发现
大纲: • Kubernetes中如何发现服务 • 如何发现Pod提供的服务 • 如何使用Service发现服务 • 如何使用kube-dns发现服务 ...
- Consul 服务发现和配置
Service discovery and configuration made easy. Distributed, highly available, and datacenter-aware. ...
- 服务发现之 Etcd VS Consul
抄自这里 *********************************************************************************************** ...
- SpringCloud+Consul 服务注册与服务发现
SpringCloud+Consul 服务注册与服务发现 1. 服务注册: 在Spring.factories有一段: # Discovery Client Configuration org.spr ...
- 服务发现:Zookeeper vs etcd vs Consul
[编者的话]本文对比了Zookeeper.etcd和Consul三种服务发现工具,探讨了最佳的服务发现解决方案,仅供参考. 如果使用预定义的端口,服务越多,发生冲突的可能性越大,毕竟,不可能有两个服务 ...
随机推荐
- 【Ubantu 系统显示ip为127.0.0.1 解决办法】
现象:Ubantu : >>>ifconfig Link encap:以太网 硬件地址****************** inet 地址:127.0.0. ...
- 【转载】Django,学习笔记
[转自]https://www.cnblogs.com/jinbchen/p/11133225.html Django知识笔记 基本应用 创建项目: django-admin startproje ...
- Docker 安装并部署Tomcat、Mysql8、Redis
1. 安装前检查 1 #ContOS 7安装Docker系统为64位,内核版本为3.10+ 2 lsb_release -a 3 4 uname -r 5 6 #更新yum源 7 yum -y up ...
- 【面试专栏】Java并发编程:volatile关键字
1. 内存模型 若一个变量在多线程环境下同时操作,则可能出现结果不一致的情况.这就是常说的缓存不一致性问题. 解决缓存不一致问题,通常有两个解决方案: 通过在总线加LOCK#锁的方式 因为CPU和其 ...
- python绘折线图
# -*- coding: utf-8 -*- import numpy as np import matplotlib.pyplot as plt #X轴,Y轴数据 y = [0.3,0.4,2,5 ...
- 阿里不允许使用 Executors 创建线程池!那怎么使用,怎么监控?
作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 五常大米好吃! 哈哈哈,是不你总买五常大米,其实五常和榆树是挨着的,榆树大米也好吃, ...
- 02-flask-路由基础
代码 from flask import Flask # 创建Flask对象 app = Flask(__name__) # 定义路由 @app.route('/') def index(): # 函 ...
- Spring(二)--IoC&AOP
IOC 一.IOC概述: 一般指控制反转(inversion of Control),把创建对象的权利交给框架,Ioc容器控制对象,是框架的重要特征,并非是面向对象编程的专用术语.它包括依赖注入(DI ...
- [日常摸鱼]luogu3398仓鼠找sugar-树链剖分
https://www.luogu.org/problemnew/show/P3398 题意:一颗$n$个点的树,$q$次询问两条链$(a,b),(c,d)$是否有交 树剖裸题orz 一开始的想法是求 ...
- Java获取到异常信息进行保存(非Copy)
吐槽:不知道从什么时候开始,各大博客网站的文章开始各种复制粘贴,想好好找一个解决方法,搜索出来的博客基本上千篇一律,主要是能解决问题也还行,还解决不了问题这就恶心了.... 所以被迫自己写一篇文章,然 ...