Kubernetes概述

最近的一年,kubernetes的发展如此闪耀,正被越来越多的公司采纳用于生产环境的实践。同时,我们可以在最著名的开发者问答社区StackOverflow上看到k8s的问题数量的增长曲线(2015.5-2016.5),开发者是用脚投票的,从这一点看也无疑证明了k8s的火爆程度。

k8s来源于Google生产环境的实践,社区活跃度很高,在github上的Star数17k+,30k+commits,同时由Google主导CNCF基金会也在强力运作k8s的社区发展,也就在几个月前OpenStack社区宣布全面拥抱k8s,这也宣布了全球第大的开源IAAS云社区已经选择k8s作为容器的唯一解决方案。

谈到k8s,无论怎样的议题怎样的开始,我们都先介绍一个k8s整体架构(如下图所示):

etcd 作为配置中心和存储服务,保存了所有组件的定义以及状态,k8s的多个组件之间的互相交互也主要通过etcd;kube-apiserver 提供和外部交互的接口,提供安全机制,大多数接口都是直接读写etcd中的数据;kube-scheduler 调度器,主要干一件事情,监听etcd中的pod目录变更,然后通过调度算法分配node,最后调用apiserver的bind接口将分配的node和pod进行关联;kube-controller-manager 承担了master的主要功能,比如和CloudProvider(IaaS)交互,管理node,pod,replication,service,namespace等。基本机制是监听etcd /registry/events下对应的事件,进行处理;kubelet 主要包含容器管理,镜像管理,Volume管理等;kube-proxy 主要用于实现k8s的service机制。提供一部分SDN功能以及集群内部的智能LoadBalancer。

本文分享的内容主要是在minion节点上的pod和service上,pod是k8s应用的具体实例抽象,而service便是这些抽象的集合。

ClusterIP & NodePort & Loadbalancer

回到本文的主题,在k8s中暴露Service访问(无论内部还是外部),都要经过kube-proxy,比如下图中我们定义一个Service,便可以通过访问Service的80端口转发到Pod的9376端口上。

kube-proxy在转发时主要有两种模式Userspace和Iptables。如下图,左侧是Userspace模式,也是kube-proxy默认的方式,所有的转发都是通过kube-proxy软件实现的;右侧是Iptables模式,所有转发都是通过Iptables内核模块实现,而kube-proxy只负责生成相应的Iptables规则。从效率上看,Iptables会更高一些,但是需要Iptables version >=1.4.11,Iptables模式在k8s1.2版本放出,是否开启使用还需要具体斟酌。

从Service本身看,有三种方式来暴露访问:

  • ClusterIP:使用集群内的私有ip —— 这是默认值

  • NodePort:除了使用cluster ip外,也将service的port映射到每个node的一个指定内部port上,映射的每个node的内部port都一样。

  • LoadBalancer:使用一个ClusterIP & NodePort,但是会向cloud provider申请映射到service本身的负载均衡。

LoadBalancer Provider主要有aws、azure、openstack、gce等云平台提供。相关实现可以在k8s的源码中看到,如下图所示:

Ingress

Ingress也是k8s中单独定义的对象(如下图所示),它的作用就是实现对外暴露访问的负载均衡,那么它和Service本身LoadBalancer有哪些区别呢?Ingress支持L4、L7负载均衡,LoadBalancer设计上只支持L4;Ingress基于Pod部署,并将Pod网络设置成external network;Ingress controller支持Nginx、Haproxy、GCE-L7,能够满足企业内部使用。

在实际使用时,Ingress的架构如下图所示:

但是在实际使用中,pod可能会产生漂移,由于Ingress Controller也是基于Pod部署,这样Ingress对外的IP会发生变化。在企业内部都会在防火墙上给Service的访问IP设定规则,而IP变动对这一机制是致命的,因为企业不可能经常手动修改防火墙规则。

那么我们就需要一个VIP功能,同时也要能保证Ingress的HA。我们可以考虑在Ingress Controller基础上增加一个keepalived,可以利用keepalived+haproxy的机制来完成VIP的功能。要实现这一机制,可以参考并改动k8s社区中的contrib-keepalived-vip机制。

除了以上介绍的暴露服务机制,还有Hpcloud-service-loadbalancer ,它实现了支持keepalived+nginx、F5、OpenStack Lbaas这些方式,并且支持L4 & L7负载均衡,但是与k8s社区本身的发展机制并不兼容,所以一直没有被合并到社区中。另外还有 Contrib-service-loadbalancer ,这个是社区内部正在发展的,它的想法更远大,考虑会支持Cross-namespace、 Cross-cluster这种级别的负载均衡,同时也是设计了插件机制,目前支持Haproxy,同样也支持L4 & L7负载均衡。

Rancher K8s中暴露服务访问

Rancher自己实现了一个rancher-ingress-controller,它本质上是包装了k8s-ingress-controller,在真正创建负载均衡器上它会调用Rancher Cattle API来创建Rancher自身的LB。

相关代码也是开源的,https://github.com/rancher/lb-controller,lb-controller在启动时候会指定provider为rancher,对应的实现也可在package provider/rancher中看到。

创建Ingress后,也可在Rancher UI上展现出来。

创建过程,可以看我录制这段视频教程,http://v.youku.com/v_show/id_XMTc2MDAzNjQ4OA==.html

原文来源:Rancher Labs

转载于:https://blog.51cto.com/12462495/1895492

如何在Kubernetes中暴露服务访问相关推荐

  1. 从零开始入门 | Kubernetes 中的服务发现与负载均衡

    作者 | 阿里巴巴技术专家  溪恒 一.需求来源 为什么需要服务发现 在 K8s 集群里面会通过 pod 去部署应用,与传统的应用部署不同,传统应用部署在给定的机器上面去部署,我们知道怎么去调用别的机 ...

  2. 安全运维-如何在Kubernetes中使用注释对ingress-nginx及后端应用进行安全加固配置实践...

    关注「WeiyiGeek」公众号 设为「特别关注」每天带你玩转网络安全运维.应用开发.物联网IOT学习! 本章目录: 0x08 Kubernetes中ingress-nginx安全配置 1.配置指定的 ...

  3. 一文了解 Kubernetes 中的服务发现

    原文链接:一文了解 Kubernetes 中的服务发现 Kubernetes 服务发现是一个经常让我产生困惑的主题之一.本文分为两个部分: 网络方面的背景知识 深入了解 Kubernetes 服务发现 ...

  4. 配置springcloud中eureka服务访问时需要用户名密码

    配置springcloud中eureka服务访问时需要用户名密码 1.application.yml中配置使用用户名密码登录链接: eureka:client:service-url:defaultZ ...

  5. 在虚拟机环境(CentOS7系统)下将kubernetes中部署服务成功,但在虚拟机外部无法访问到服务...

    在CentOS7环境下,kubernetes单机版环境,成功部署一个服务,在虚拟机中访问服务没问题,下面这样: curl http://172.27.73.26:8888/eureka-server/ ...

  6. 基于网络抓包实现kubernetes中微服务的应用级监控

    微服务是什么? 此话题不是本文重点,如你还不知道.请谷歌一波,会有遍地的解释.引用下图说明下微服务可能呈现的形态: 微服务监控的挑战 监控的目的是为了让集群中所有的服务组件,不管是HTTP服务,数据库 ...

  7. python微服务监控_基于网络抓包实现kubernetes中微服务的应用级监控

    微服务是什么? 此话题不是本文重点,如你还不知道.请谷歌一波,会有遍地的解释.引用下图说明下微服务可能呈现的形态: 微服务监控的挑战 监控的目的是为了让集群中所有的服务组件,不管是HTTP服务,数据库 ...

  8. 一文详解 Kubernetes 中的服务发现,运维请收藏

    K8S 服务发现之旅 Kubernetes 服务发现是一个经常让我产生困惑的主题之一.本文分为两个部分: 网络方面的背景知识 深入了解 Kubernetes 服务发现 要了解服务发现,首先要了解背后的 ...

  9. 浅谈 Kubernetes 中的服务发现

    原文:https://nigelpoulton.com/blog/f/demystifying-kubernetes-service-discovery Kubernetes 服务发现是一个经常让我产 ...

最新文章

  1. kali2020安装中文输入法(切换中文输入法)
  2. 2.本征矩阵 基本矩阵以及对极几何之间的约束关系
  3. 十一、Powerbi函数篇
  4. 【渝粤教育】电大中专新媒体营销实务 (7)作业 题库
  5. 【英语学习】【WOTD】brummagem 释义/词源/示例
  6. Qlikview出现异常重复计数的解决办法
  7. Android APP启动白屏的解决办法
  8. 如何在office2016(word2016)中安装mathtype6.9及相关问题解决方案
  9. [iOS]转让APP
  10. 21版本FL Studio水果音乐制作软件下载
  11. vueDialog弹框被遮罩层挡住
  12. 党员管理系统毕业设计
  13. 汇编语言error A2044: invalid character in file
  14. PVE 下使用i2ctools显示DIMM温度 内存温度(未成功)
  15. 文件打包压缩与远程传输
  16. 时间组件moment的使用
  17. Centos7 安装mysql8.0.21 Compressed TAR Archive版
  18. VMware Guest customization fails on Linux
  19. 破解google翻译接口
  20. Foosball桌上足球

热门文章

  1. python画图y轴在右侧_解决python中画图时x,y轴名称出现中文乱码的问题
  2. python if and_python有趣用法汇总(持续更新)
  3. 电脑分屏软件_Fcpx分屏插件 41组视频分割可自定义分屏动画效果插件 可分9屏 Split Pop...
  4. 深蓝学院《从零开始手写VIO》作业三
  5. 将近400篇原创后,有三AI喊你正式加入来不来?
  6. 中国江苏省动漫产业发展导向及运营前景规划咨询报告2021-2027年
  7. 全球及中国胶原蛋白肠衣行业深度分析及投资战略规划报告2022-2028年版
  8. Android NFC 开发实例
  9. 中粮集团对话农民丰收节交易会-万祥军:订单农业丰收经
  10. SQL SERVER 2000安装遇到的问题小汇总(转载)