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. Win10系列:UWP界面布局基础5

    (2)编写后台代码访问资源 下面通过一个例子来演示如何编写后台代码引用资源.新建一个Windows应用商店的空白应用程序项目,将其命名为AccessResourceApplication,打开项目下的 ...

  2. 阿里云免费申请https证书

    申请地址   https://common-buy.aliyun.com/?spm=a2c4e.11153940.blogcont65199.22.30f968210RsUSx&commodi ...

  3. Leetcode 回溯法 典型例题

    那些要求列举所有的情况,或者说所有的情况都要探讨一下的例题,一般都可以考虑回溯法. 当遇到一个可以用到回溯法的时候需要按照如下步骤进行: 1.确定问题一个可以用到回溯法的时候需要按照如下步骤进行: 1 ...

  4. 初始JSP

    什么是JSP 1.JSP(Java Server Pages):在HTML中嵌入Java脚本代码 静态内容是JSP页面中的静态文本,其基本是HTML文本,与Java和JSP语法无关. 例子: 运行结果 ...

  5. page指令import属性实例

    <%@ page language="java" import="java.util.*" pageEncoding="utf-8"% ...

  6. 安装ubuntu不能引导win7

    台式机安装了ubuntu导致进不了win7了,2系统在同一硬盘. win7引导需要bootmgr和boot文件夹中的文件,2个东东在winows引导分区根目录下. 我的笔记本安装windows系统分区 ...

  7. CodeForces - 631C (截取法)

    C. Report time limit per test 2 seconds memory limit per test 256 megabytes input standard input out ...

  8. L268 A terrifying look at the consequences of climate change

    Climate change is a devilish problem for humanity: at once urgent and slow-moving, immediate and dis ...

  9. leetcode第11题:盛水最多的容器

    给定 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点 (i, ai) .在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0).找出其中的两条线, ...

  10. springmvc跳转到自定义404页面的三种方法

    有时候我们并不想跳转到系统自定义的错误页面中,那么我们需要自定义页面并且实现它的跳转 有三种方法可以实现 方法一:最简单的实现,也是最快的 在<web-app>节点下配置 代码如下: &l ...