如何在Kubernetes中暴露服务访问
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中暴露服务访问相关推荐
- 从零开始入门 | Kubernetes 中的服务发现与负载均衡
作者 | 阿里巴巴技术专家 溪恒 一.需求来源 为什么需要服务发现 在 K8s 集群里面会通过 pod 去部署应用,与传统的应用部署不同,传统应用部署在给定的机器上面去部署,我们知道怎么去调用别的机 ...
- 安全运维-如何在Kubernetes中使用注释对ingress-nginx及后端应用进行安全加固配置实践...
关注「WeiyiGeek」公众号 设为「特别关注」每天带你玩转网络安全运维.应用开发.物联网IOT学习! 本章目录: 0x08 Kubernetes中ingress-nginx安全配置 1.配置指定的 ...
- 一文了解 Kubernetes 中的服务发现
原文链接:一文了解 Kubernetes 中的服务发现 Kubernetes 服务发现是一个经常让我产生困惑的主题之一.本文分为两个部分: 网络方面的背景知识 深入了解 Kubernetes 服务发现 ...
- 配置springcloud中eureka服务访问时需要用户名密码
配置springcloud中eureka服务访问时需要用户名密码 1.application.yml中配置使用用户名密码登录链接: eureka:client:service-url:defaultZ ...
- 在虚拟机环境(CentOS7系统)下将kubernetes中部署服务成功,但在虚拟机外部无法访问到服务...
在CentOS7环境下,kubernetes单机版环境,成功部署一个服务,在虚拟机中访问服务没问题,下面这样: curl http://172.27.73.26:8888/eureka-server/ ...
- 基于网络抓包实现kubernetes中微服务的应用级监控
微服务是什么? 此话题不是本文重点,如你还不知道.请谷歌一波,会有遍地的解释.引用下图说明下微服务可能呈现的形态: 微服务监控的挑战 监控的目的是为了让集群中所有的服务组件,不管是HTTP服务,数据库 ...
- python微服务监控_基于网络抓包实现kubernetes中微服务的应用级监控
微服务是什么? 此话题不是本文重点,如你还不知道.请谷歌一波,会有遍地的解释.引用下图说明下微服务可能呈现的形态: 微服务监控的挑战 监控的目的是为了让集群中所有的服务组件,不管是HTTP服务,数据库 ...
- 一文详解 Kubernetes 中的服务发现,运维请收藏
K8S 服务发现之旅 Kubernetes 服务发现是一个经常让我产生困惑的主题之一.本文分为两个部分: 网络方面的背景知识 深入了解 Kubernetes 服务发现 要了解服务发现,首先要了解背后的 ...
- 浅谈 Kubernetes 中的服务发现
原文:https://nigelpoulton.com/blog/f/demystifying-kubernetes-service-discovery Kubernetes 服务发现是一个经常让我产 ...
最新文章
- kali2020安装中文输入法(切换中文输入法)
- 2.本征矩阵 基本矩阵以及对极几何之间的约束关系
- 十一、Powerbi函数篇
- 【渝粤教育】电大中专新媒体营销实务 (7)作业 题库
- 【英语学习】【WOTD】brummagem 释义/词源/示例
- Qlikview出现异常重复计数的解决办法
- Android APP启动白屏的解决办法
- 如何在office2016(word2016)中安装mathtype6.9及相关问题解决方案
- [iOS]转让APP
- 21版本FL Studio水果音乐制作软件下载
- vueDialog弹框被遮罩层挡住
- 党员管理系统毕业设计
- 汇编语言error A2044: invalid character in file
- PVE 下使用i2ctools显示DIMM温度 内存温度(未成功)
- 文件打包压缩与远程传输
- 时间组件moment的使用
- Centos7 安装mysql8.0.21 Compressed TAR Archive版
- VMware Guest customization fails on Linux
- 破解google翻译接口
- Foosball桌上足球
热门文章
- python画图y轴在右侧_解决python中画图时x,y轴名称出现中文乱码的问题
- python if and_python有趣用法汇总(持续更新)
- 电脑分屏软件_Fcpx分屏插件 41组视频分割可自定义分屏动画效果插件 可分9屏 Split Pop...
- 深蓝学院《从零开始手写VIO》作业三
- 将近400篇原创后,有三AI喊你正式加入来不来?
- 中国江苏省动漫产业发展导向及运营前景规划咨询报告2021-2027年
- 全球及中国胶原蛋白肠衣行业深度分析及投资战略规划报告2022-2028年版
- Android NFC 开发实例
- 中粮集团对话农民丰收节交易会-万祥军:订单农业丰收经
- SQL SERVER 2000安装遇到的问题小汇总(转载)