DNS for Services and Pods

Services

创建基本的Service

  • kind: Service
  • spec.clusterIP: 为一组相同的服务的Pod集群提供一个虚拟ip地址作为入口
  • spec.clusterIP: 自动生成,也支持自定义,但必须在service-cluster-ip-range CIDR range范围内
  • spec.selector:选择Label匹配的Pod
  • spec.ports.protocol:支持TCP,UDP and SCTP
  • spec.ports支持同时暴露多个端口

Service Type

  • ClusterIP:

    1. 暴露一个internal IP,只能为Cluster内部提供服务
    2. 集群内其他Pod通过clusterIP:port访问/也可以通过NodeIp:port访问
    3. 可用于Eureka Client配置注册中心这种情况:只需要配置集群中的一个节点,但又能做到节点异常时能连接到其他节点
  • NodePort
    1. 暴露一个集群内部使用的ClusterIP,还暴露NodeIp(NodeHost):NodePort的接口
    2. NodePort在有Node上都一样,可以自动生成,也可以指定,范围--service-node-port-range flag (default: 30000-32767)
    3. 如果有Pod在同一个Node上面,NodeIp:NodePort访问和ClusterIP访问结果一样
    4. 集群内其他Pod通过clusterIP:port访问/也可以通过NodeIp:port访问/还可以通过NodeIp:NodePort访问
  • Headless services
    1. spec.clusterIP: None
    2. 集群内其他Pod只能通过NodeIp:port访问
  • LoadBalancer
    1. 暴露一个负载均衡的internal ClusterIP,只能为Cluster内部提供服务
    2. 暴露一个集群外部使用的externalIPs?
    3. 集群内其他Pod通过clusterIP:port访问/也可以通过NodeIp:port访问/还可以通过NodeIp:NodePort访问
    4. 负载均衡由云服务商提供
    5. NodePort and ClusterIP

Service为非Pod服务提供入口

kind: Endpoints
apiVersion: v1
metadata:
name: my-service
subsets:
- addresses:
- ip: 1.2.3.4
ports:
- port: 9376
  • 这种方式不支持虚拟IP,所以不能使其他Service的cluster IPs

服务发现

  • Environment系统环境变量

    1. 自动生成如下所示env到容器系统环境变量

      1. {SVCNAME}_SERVICE_HOST and {SVCNAME}_SERVICE_PORT
      2. service必须比容器先创建
      3. 出了这种方式还支持Docker链接--link
    2. 例子env | greo REDIS
      1. REDIS_MASTER_SERVICE_HOST=10.0.0.11
      2. REDIS_MASTER_SERVICE_PORT=6379
      3. REDIS_MASTER_PORT=tcp://10.0.0.11:6379
      4. REDIS_MASTER_PORT_6379_TCP=tcp://10.0.0.11:6379
      5. REDIS_MASTER_PORT_6379_TCP_PROTO=tcp
      6. REDIS_MASTER_PORT_6379_TCP_PORT=6379
      7. REDIS_MASTER_PORT_6379_TCP_ADDR=10.0.0.11
  • DNS
    1. 通过my-service.my-ns访问服务: e.g.: http://rates-eureka.icg-msst-cv-rates-171832.svc:8080/eureka
    2. 通过_http._tcp.my-service.my-ns访问名字为http,protocol 为TPC的服务
    3. Type=ExternalName的Service只能使用DNS访问
    4. DNS没有Service必须比容器先创建的限制
    5. Eureka服务注册
  • 推荐使用DNS
    1. 服务发现只限于集群内部使用,带来的好处是你不必关心你的环境是dev/uat还是prod,只需要保证不同环境使用不同集群就能使用相同的URL配置
    2. Eureka服务注册
  • Pod服务发现
    1. 通过Pod的ip:port来实现,hostname不管用,所以Eureka Client需要使用ip注册

Proxy Mode

  • iptables

    1. 高效,但是不能重试其他Pod
    2. Pod挂掉每关系,就怕服务有问题
    3. 默认随机选择Pod
    4. 做好 readiness probes
  • userspace
    1. 低效,但是可以重试其他Pod,将被淘汰
  • sessionAffinity
    1. 任何Mode都可以通过设置spec.sessionAffinity to “ClientIP”设置,默认过期3小时(10800)
    2. spec.sessionAffinityConfig.clientIP.timeoutSeconds: 设置过期

Kubernetes学习的更多相关文章

  1. Kubernetes学习之路目录

    Kubernetes基础篇 环境说明 版本说明 系统环境 Centos 7.2 Kubernetes版本 v1.11.2 Docker版本 v18.09 Kubernetes学习之路(一)之概念和架构 ...

  2. kubernetes学习资源

    参考文章: 1.kubernetes学习资源 1. <Kubernetes与云原生应用>系列之Kubernetes的系统架构与设计理念 2.[docker专业介绍的网站dockerinfo ...

  3. Kubernetes 学习笔记(一):基础概念

    个人笔记,仅本人查阅使用,不保证正确. 零.微服务 微服务架构专注于应用解耦合,通过将应用彻底地组件化和服务化,每个微服务只包含一个非常小的功能,比如权限管理.日志收集等等.由这一组微服务组合起来,提 ...

  4. Kubernetes学习笔记(八):Deployment--声明式的升级应用

    概述 本文核心问题是:如何升级应用. 对于Pod的更新有两种策略: 一是删除全部旧Pod之后再创建新Pod.好处是,同一时间只会有一个版本的应用存在:缺点是,应用有一段时间不可用. 二是先创建新Pod ...

  5. kubernetes学习01—kubernetes介绍

    本文收录在容器技术学习系列文章总目录 一.简介 1.Kubernetes代码托管在GitHub上:https://github.com/kubernetes/kubernetes/. 2.Kubern ...

  6. kubernetes学习14—Dashboard搭建和认证

    本文收录在容器技术学习系列文章总目录 一.介绍 Kubernetes Dashboard是Kubernetes集群的基于Web的通用UI.它允许用户管理在群集中运行的应用程序并对其进行故障排除,以及管 ...

  7. 深入剖析Kubernetes学习笔记:开篇词(00)

    一.关于Kubernetes初学的疑惑 就在这场因"容器"而起的技术变革中,kubernetes项目已经成为容器技术的事实标准,重新定义了基础设置领域对应用编排与管理的种种可能 1 ...

  8. Kubernetes学习之路(26)之kubeasz+ansible部署集群

    目录 1.环境说明 2.准备工作 3.分步骤安装 3.1.创建证书和安装准备 3.2.安装etcd集群 3.3.安装docker 3.4.安装master节点 3.5.安装node节点 3.6.部署集 ...

  9. Kubernetes学习系列

    这段时间项目组内想要引入Kubernetes,作为第二代容器调度引擎,故最近在系统的学习Kubernetes.整理了一些学习笔记,心得,放到博客中,一来记录自己的学习经过,二来看能否帮到有需要的同学. ...

  10. Kubernetes学习之路(二十五)之Helm程序包管理器

    目录 1.Helm的概念和架构 2.部署Helm (1)下载helm (2)部署Tiller 3.helm的使用 4.chart 目录结构 5.chart模板 6.定制安装MySQL chart (1 ...

随机推荐

  1. Java 方法重载 方法重写

    方法重载规则 参数个数不同 参数个数相同,但参数列表中对应的某个参数的类型不一样 方法的返回类型和参数名称不参与重载 "编译期绑定",,因为未产生对象,只看参数.引用类型绑定方法 ...

  2. dell win10 productkey

  3. OO Summary Ⅲ

    规格化设计的发展历史 (这一部分并没有找到答案,于是参考了好黄和温莎莎的blogs) 1950年代,第一次分离,主程序和子程序的分离程序结构模型是树状模型,子程序可先于主程序编写.通过使用库函数来简化 ...

  4. Oracle shrink space

    一.开启表的行迁移 alter table table_name enable row movement; select 'alter table '||s.owner||'.'||s.table_n ...

  5. day12 生成器和各种推导式

    今天主要学习了 1.生成器 2.生成器函数 3.各种推导式(比较诡异,理解了很简单,不理解很难) 4.生成器表达式(重点) 一.生成器 def func(): print'我叫周润发' return ...

  6. 初识数据库、初识MySQL

    一.为什么要用数据库 # 1.将文件和程序存在一台机器上是很不合理的. # 2.操作文件是一件很麻烦的事. 所以就出现了一个新的概念 —— 数据库 你可以理解为 数据库 是一个可以在一台机器上独立工作 ...

  7. 在JS文件中,不需要<script>标签

    在JS文件中,不需要<script>标签\

  8. python笔记1-基础概念、python安装使用配置

    Python 1.基础概念 一.什么是python? python是一种面向对象.解释型的计算机语言,它的特点是语法简洁.优雅.简单易学.在1989诞生,Guido(龟叔)开发.这里的python并不 ...

  9. UBUNTU安装 Rabbitvsc可视化版本控制客户端软件

    sudo add-apt-repository ppa:rabbitvcs/ppa sudo apt-get update sudo apt-get install rabbitvcs-core ra ...

  10. oracle语句优化

    摘录来自https://blog.csdn.net/sap_jack/article/details/3766703 1.选用适合的Oracle优化器 Oracle的优化器共有3种: a.RULE(基 ...