Service discovery
In k8s, we usually will more than make an application instance, and also the corresponding multiple pod, if through the pod IP access to the pod service will be hard to manage. Kubernetes provides the concept of service can be accessed through the VIP pod services, but in the use of the time there is a problem: how do you know an application of the VIP?We have two application, for example, an APP, one is the DB, manage each application using the rc, and provide services through service exposed the port.APP needs to connect to the DB application, we only know the name of a DB application, but do not know the VIP address.
The simplest way from kubernetes provides query API.But this is a bad practice, every application must first write queries at start-up time rely on the service logic, this itself is repeat and increases the complexity of the application;Second leading to applications rely on kubernetes, will not be able to deploy and run separately (of course, if by adding configuration option is also can be done, but it is increase in degrees).
At first, the method of kubernetes adopted docker used - environment variables.Start each pod, will be put through the environment variable is set all service of IP and port information, so that the application of the pod can be read by the environment variable to rely on the service address information.Matching relation between service and environment variables this way has a certain specification, use rise also relatively simple, but there is a big problem: rely on the service must be started in the pod existed before, otherwise will not appear in the environment variable.
A more ideal solution is: application can directly use the name of the service, don't need to care about it the IP address of the actual, in the middle of the conversion can be done automatically.DNS is name and IP conversion between the function of the system, so kubernetes is also provides the DNS method to solve this problem.
DNS Service
The DNS service is not independent of the system, but an addon, as a plug-in to install, not kubernetes cluster must (but very recommended installation).Can take it as a run on the application of the cluster, it's just the application is special.
There are two kinds of DNS configuration mode, using etcd + kube2sky + skydns way before version 1.3, can be used after 1.3 kubedns + dnsmasq way.
kube2sky mode
This model mainly has three containers in operation:
- Kube2sky is responsible for the continuous monitoring k8s apiserver, once has the service creation, will obtain the service IP, and stored in the etcd
- Etcd in the form of the key - value is used to store the service name and the corresponding "ClusterIP"
- SkyDNS: according to the data of the etcd, external DNS query service
Service discovery
In k8s, we usually will more than make an application instance, and also the corresponding multiple pod, if through the pod IP access to the pod service will be hard to manage. Kubernetes provides the concept of service can be accessed through the VIP pod services, but in the use of the time there is a problem: how do you know an application of the VIP?We have two application, for example, an APP, one is the DB, manage each application using the rc, and provide services through service exposed the port.APP needs to connect to the DB application, we only know the name of a DB application, but do not know the VIP address.
The simplest way from kubernetes provides query API.But this is a bad practice, every application must first write queries at start-up time rely on the service logic, this itself is repeat and increases the complexity of the application;Second leading to applications rely on kubernetes, will not be able to deploy and run separately (of course, if by adding configuration option is also can be done, but it is increase in degrees).
At first, the method of kubernetes adopted docker used - environment variables.Start each pod, will be put through the environment variable is set all service of IP and port information, so that the application of the pod can be read by the environment variable to rely on the service address information.Matching relation between service and environment variables this way has a certain specification, use rise also relatively simple, but there is a big problem: rely on the service must be started in the pod existed before, otherwise will not appear in the environment variable.
A more ideal solution is: application can directly use the name of the service, don't need to care about it the IP address of the actual, in the middle of the conversion can be done automatically.DNS is name and IP conversion between the function of the system, so kubernetes is also provides the DNS method to solve this problem.
DNS Service
The DNS service is not independent of the system, but an addon, as a plug-in to install, not kubernetes cluster must (but very recommended installation).Can take it as a run on the application of the cluster, it's just the application is special.
There are two kinds of DNS configuration mode, using etcd + kube2sky + skydns way before version 1.3, can be used after 1.3 kubedns + dnsmasq way.
kube2sky mode
This model mainly has three containers in operation:
- Kube2sky is responsible for the continuous monitoring k8s apiserver, once has the service creation, will obtain the service IP, and stored in the etcd
- Etcd in the form of the key - value is used to store the service name and the corresponding "ClusterIP"
- SkyDNS: according to the data of the etcd, external DNS query service
example:
There is a DB, a APP server, APP server needs to connect DB for data reading and writing
1.DB server, through the RC created a pod, and at the same time to create a service for integration of the pod,DB service named DB_server.This is accomplished by k8s - apiserver,Will be a cluster IP for DB service distribution,for example: 192.168.20.3,ClusterIP can only be used for use within the cluster.
2.kube2sky listening to APIserver operations, access to the service name: DB_server and clusterIP: 192.168.20.3, and will write etcd.
3.APP server configured in the DB address for 'DB_server', this is the name of DB service,Use the service name instead of IP
4.Pod will send service name: DB_server to skyDNS, loading from etcd skyDNS service name corresponding IP, returned to the Pod
kubeDNS mode
This mode, kubeDNS container replace the function of the original three container, it will be to monitor apiserver and put all the service and the result of the endpoints using appropriate data structure stored in memory, and external DNS query service.
- KubeDNS: to provide the original kube2sky + etcd + skyDNS function, can provide DNS query service
- A lightweight DNS service software, can provide DNS cache function.KubeDNS mode, dnsmasq in memory set aside a block size (the default is 1g), save the current most commonly used DNS query record, if there is no to find records in the cache, it will into kubeDNS query, and the results are cached
example:
1.DB server, through the RC created a pod, and at the same time to create a service for integration of the pod,DB service named DB_server.This is accomplished by k8s - apiserver,Will be a cluster IP for DB service distribution,for example: 192.168.20.3,ClusterIP can only be used for use within the cluster.
2. kubeDNS listening to APIserver operations,access to the service name: DB_server and clusterIP: 192.168.20.3, and use tree structure write cache.
3. dnsmasq:DNS rules obtained through kubedns container, in a cluster to provide DNS query service, equivalent to the DNS server.
4. APP server configured in the DB address for 'DB_server', this is the name of DB service,Use the service name instead of IP
5. Pod will send service name: DB_server to dnsmasq,dnsmasq query to the service of the corresponding IP is returned to the pod, if not checked, will contact the kubeDNS,If kubeDNS no record, it will return an error report to the APP server pod.
example:
There is a DB, a APP server, APP server needs to connect DB for data reading and writing
1.DB server, through the RC created a pod, and at the same time to create a service for integration of the pod,DB service named DB_server.This is accomplished by k8s - apiserver,Will be a cluster IP for DB service distribution,for example: 192.168.20.3,ClusterIP can only be used for use within the cluster.
2.kube2sky listening to APIserver operations, access to the service name: DB_server and clusterIP: 192.168.20.3, and will write etcd.
3.APP server configured in the DB address for 'DB_server', this is the name of DB service,Use the service name instead of IP
4.Pod will send service name: DB_server to skyDNS, loading from etcd skyDNS service name corresponding IP, returned to the Pod
kubeDNS mode
This mode, kubeDNS container replace the function of the original three container, it will be to monitor apiserver and put all the service and the result of the endpoints using appropriate data structure stored in memory, and external DNS query service.
- KubeDNS: to provide the original kube2sky + etcd + skyDNS function, can provide DNS query service
- A lightweight DNS service software, can provide DNS cache function.KubeDNS mode, dnsmasq in memory set aside a block size (the default is 1g), save the current most commonly used DNS query record, if there is no to find records in the cache, it will into kubeDNS query, and the results are cached
example:
1.DB server, through the RC created a pod, and at the same time to create a service for integration of the pod,DB service named DB_server.This is accomplished by k8s - apiserver,Will be a cluster IP for DB service distribution,for example: 192.168.20.3,ClusterIP can only be used for use within the cluster.
2. kubeDNS listening to APIserver operations,access to the service name: DB_server and clusterIP: 192.168.20.3, and use tree structure write cache.
3. dnsmasq:DNS rules obtained through kubedns container, in a cluster to provide DNS query service, equivalent to the DNS server.
4. APP server configured in the DB address for 'DB_server', this is the name of DB service,Use the service name instead of IP
5. Pod will send service name: DB_server to dnsmasq,dnsmasq query to the service of the corresponding IP is returned to the pod, if not checked, will contact the kubeDNS,If kubeDNS no record, it will return an error report to the APP server pod.
- Open-Source Service Discovery
Service discovery is a key component of most distributed systems and service oriented architectures. ...
- Spring Boot Dubbo Dubbok spring cloud
比较spring cloud和dubbo,各自的优缺点是什么 - 趁年轻再疯狂一次吧 - CSDN博客 https://blog.csdn.net/u010664947/article/details ...
- springcloud情操陶冶-初识springcloud
许久之前便听到了springcloud如雷贯耳的大名,但是不曾谋面,其主要应用于微服务的相关架构.笔者对微服务并不是很了解,但其既然比较出众,遂也稍微接触研究下 springcloud特性 sprin ...
- 微服务领域是不是要变天了?Spring Cloud Alibaba正式入驻Spring Cloud官方孵化器!
引言 微服务这个词的热度自它出现以后,就一直是高烧不退,而微服务之所以这么火,其实和近几年互联网的创业氛围是分不开的. 与传统行业不同,互联网企业有一个特点,那就是市场扩张速度非常之快,可能也就是几天 ...
- springcloud
基本术语 1.服务器 服务器:是提供计算服务的设备.由于服务器需要响应服务请求,并进行处理,因此一般来说服务器应具备承担服务并且保障服务的能力.服务器的构成:包括处理器.硬盘.内存.系统总线等,和通用 ...
- 微服务之Spring cloud
微服务 Spring cloud Spring Cloud provides tools for developers to quickly build some of the common patt ...
- Spring Cloud简介
一.本文介绍 Web应用由最早的单体应用发展成为集群式的部署,再到现在的分布式系统.尤其是这两年分布式相关的技术发展的很快,一方面是以Dubbo为代表的,另一方面则是以Spring Cloud系列为代 ...
- Spring Cloud Summary
Spring Cloud Summary https://cloud.spring.io/spring-cloud-static/Finchley.RC1/single/spring-cloud.ht ...
- 搭建Spring Initializr服务器
前言 按照网上很多教程,出错特别多.首先是GitHub和maven仓库的网络环境比较差,踩了很多坑:其次是SpringInitializr更新迭代几个版本,0.7.0我也没能弄成功.索性就用了旧版本0 ...
随机推荐
- 给定一个字符串,把字符串内的字母转换成该字母的下一个字母,a换成b,z换成a,Z换成A,如aBf转换成bCg, 字符串内的其他字符不改变,给定函数,编写函数 void Stringchang(const char*input,char*output)其中input是输入字符串,output是输出字符串
import java.util.Scanner; /*** * 1. 给定一个字符串,把字符串内的字母转换成该字母的下一个字母,a换成b,z换成a,Z换成A,如aBf转换成bCg, 字符串内的其他字 ...
- 用配置文件里面的参数值替换yaml模板中的变量值【python】
用配置文件里面的参数值替换yaml模板中的变量值[python] #!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2019/9/20 1 ...
- [spring]基于注解的spring配置
Spring是一个基于IOC和AOP的结构J2EE系统的框架 IOC 反转控制 是Spring的基础,Inversion Of Control 简单说就是创建对象由以前的程序员自己new 构造方法来调 ...
- JAVA VUser
JAVA VUser 一.java虚拟用户协议 java虚拟用户脚本主要有Java Vuser.Corba-Java.RMI-Java.EJB等类型.这些类型的虚拟用户脚本均可以用java语言来手工编 ...
- Java 程序员必备的 Intellij IDEA 插件
以下是我用过不错的Intellij插件,分享给大家希望能帮到大家. 1. ignore 地址: https://plugins.jetbrains.com/plugin/7495--ignore 生成 ...
- LeetCode.1089-重复的0(Duplicate Zeros)
这是小川的第392次更新,第423篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第255题(顺位题号是1089).给定一个固定长度的整数数组arr,复制每次出现的零,将剩 ...
- 如何将其它javaweb项目变成可以成功在自己eclipse环境中运行的javaweb项目?
说明:此文档仅适用于以下两种情况 (1)myeclipse项目需要在eclipse环境中运行 (2)eclipse项目,但是无法在自己的电脑eclipse环境中运行 注意:以下 ...
- NoSQL--leveldb
什么是leveldb: leveldb它是一个 NOSQL 存储引擎,它和 Redis 不是一个概念.Redis 是一个完备的数据库,而 LevelDB 它只是一个引擎. LevelDB 还可以将它看 ...
- vue-teach
编译器的工作过程 http://www.ruanyifeng.com/blog/2014/11/compiler.html DNS 原理入门 http://www.ruanyifeng.com/blo ...
- 菜鸟系列Fabric——Fabric 基本概念(1)
Fabric 基本概念 1.区块链介绍 区块链之所以引来关注是因为比特币开源项目,尤其是比特币价值的飙升,让大家开始关注数字货币以及相关技术.那么区块链究竟是什么? 1.1 区块链定义 狭义上,区块链 ...