千家信息网

如何在Kubernetes中暴露服务访问

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,Kubernetes概述最近的一年,kubernetes的发展如此闪耀,正被越来越多的公司采纳用于生产环境的实践。同时,我们可以在最著名的开发者问答社区StackOverflow上看到k8s的问题数量
千家信息网最后更新 2026年11月02日如何在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


机制 社区 支持 均衡 功能 同时 模式 发展 管理 服务 企业 接口 方式 规则 可在 实际 容器 开发者 是在 来源 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技工作委员会主任 云信互联网科技有限公司 以房互联网科技 米客互联网科技 互联网高科技企业 多迪互联网科技有限公司 重庆科技学院互联网 汉立互联网科技有限公司联系电话 江苏南京365互联网科技 武汉健翔互联网络科技有限公司 湖南一路畅行互联网科技 上海钢联属于互联网科技股吗 北京市互联网新科技 皮皮虾互联网科技有限公司 宇信科技在杭州互联网排第几 美国五大互联网科技公司市值多少 青岛易易互联网科技 重庆科技产业互联网有哪些 瑞安市蟠桃会互联网科技有限公司 知域互联网科技有限公司官网 互联网科技公司起名 科技赋能下的互联网金融 互联网通讯科技 四个字互联网科技公司取名 武汉健翔互联网络科技有限公司 科技类公司包括互联网吗 朱啸虎曾投资哪些互联网科技企业 互联网时代科技型公司的机会 山东亿川互联网科技有限责任公司 武汉亿视互联网科技有限公司
0