【从入门到放弃-Kubernetes】Kubernetes入门-对外暴露服务
前言
上文【从入门到放弃-Kubernetes】Kubernetes入门-无状态应用扩缩容中介绍了如何通过yaml配置文件部署无状态的应用,及如何对其扩缩容。
部署后的服务可以通过dashboard在k8s集群中看到。但还没有对外暴露 提供服务。本文,我们学习下k8s对外暴露服务的几种方式。
服务类型(type)
可以在service的yaml文件中设置type配置,type的取值及含义如下:
ClusterIP
通过集群的内部 IP 暴露服务,选择该值,服务只能够在集群内部可以访问,这也是默认的 ServiceType。
apiVersion: v1 kind: Service metadata: name: clusterip-service spec: type: ClusterIP selector: app: node ports: - port: 8080
注意:直接访问 http://10.104.145.1:8080 是不行的,10.104.145.1是一个内部IP。
NodePort
通过每个 Node 上的 IP 和静态端口(NodePort)暴露服务。NodePort 服务会路由到 ClusterIP 服务,这个 ClusterIP 服务会自动创建。通过请求 NodeIP:NodePort,可以从集群的外部访问一个 NodePort 服务。
apiVersion: v1 kind: Service metadata: name: nodeport-service spec: type: NodePort selector: app: node ports: - port: 8080 nodePort: 30001
如果没有指定.spec.ports[].nodePort,则会在--service-node-port-range 标志指定的范围内分配端口(默认值:30000-32767)
官方文档显示,此时Service 就能够通过 NodeIP:spec.ports[].nodePort 和 spec.clusterIp:spec.ports[].port 而对外可见了。
但我本地测试,两种方式均无法访问,查阅资料应该和这个issue有关,具体原因还没深追,issue中提到minikube tunnel的方式,测试可用。
LoadBalancer
使用外部负载均衡器方式访问,来自外部负载均衡器的流量将直接打到 backend Pod 上,不过实际它们是如何工作的,这要依赖于云提供商。
apiVersion: v1 kind: Service metadata: name: loadbalancer-service spec: type: LoadBalancer selector: app: node ports: - port: 8080 nodePort: 30003
因为我们没有使用外部服务器,所以EXTERNAL-IP是空,无法直接访问,因此需要使用
minikube tunnel
可以看到EXTERNAL-IP已经有了,这时候访问: http://127.0.0.1:8080/ ,可以看到我们service.js中的输出。
ExternalName
ExternalName可以将集群外的服务映射为集群内的资源
apiVersion: v1 kind: Service metadata: name: externalname-service spec: type: ExternalName externalName: nc2era.com
映射成功后,我们进入到pod中。
可以看到 ping nc2era.com和ping externalname-service是一样的。
expose
基于deployment
对一个deployment创建service
kubectl expose deployment node-deployment --name=my-service --type=LoadBalancer
访问 http://127.0.0.1:8080 可以看到service.js的输出。
基于service
在一个service的基础上创建另一个service
//先创建一个nodeport类型的service,此时无法访问 http://127.0.0.1:8080 kubectl expose deployment node-deployment --name=node-service --type=NodePort //基于node-service,创建一个LoadBalancer service, 此时可以访问 http://127.0.0.1:8080 了 kubectl expose service node-service --name=my-service --type=LoadBalancer
port-forward
kubectl port-forward 通过端口转发映射本地端口到指定的应用端口,从而访问集群中的应用程序(Pod).
转发pod端口
kubectl get pods kubectl port-forward pod/node-deployment-8cd5587f7-xw9nb 8088:8080
查看pods列表,选择一个进行端口转发
此时可以访问 http://127.0.0.1:8088
转发Deployment端口
kubectl get deployments kubectl port-forward deployment/node-deployment 8088:8080
查看deployment并进行端口转发
此时可以访问 http://127.0.0.1:8088
转发service端口
//创建一个nodeport类型的service,此时 http://127.0.0.1:8088 无法访问 kubectl apply -f nodeport-service.yaml kubectl get services kubectl port-forward service/nodeport-service 8088:8080
创建一个nodeport类型service,并转发映射本地8088端口至service的8080端口。
此时可以访问 http://127.0.0.1:8088
总结
以上就是几种可以在本地访问k8s集群服务的方式。具体细节我还没有深入了解,有不对的地方欢迎交流指出。在学习完基础入门知识后,后续文章中会逐个进行剖析。
本文中所有yaml文件都在我的git仓库AloofJr,欢迎大家使用学习。
更多文章
见我的博客:https://nc2era.com
written by AloofJr,转载请注明出处

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
风口浪尖的视频会议No.1,背后折射的安全问题让人深思
直播:近二十载从业老兵谈金融科技赋能的探索与实践 试想一下,当你知道自己某个常用软件的账号密码被公开在暗网叫卖,且价格特别便宜的时候,你心里会怎么想?很不幸,最近Zoom的用户们就在考虑这个问题,作为疫情期间使用量和股价齐飞的优秀代表,Zoom关于安全隐私方面的保护措施受到了各大媒体的口诛笔伐,这也引起了人们新一轮的对网络安全的深思…… ==Zoom的喜与悲== 疫情期间,视频会议需求暴涨,这同时带来了视频会议软件的使用量激增,这其中最为突出的就是Zoom,其日活用户从19年12月份的1千万人激增到现在的2亿人,无法出门的全球各地用户使用Zoom开会、上课、探亲、访友甚至看医生,其“简单好用”的特性受到了大家的一致好评。 Zoom(图片来源:Forbes) 但简单好用往往是和安全漏洞多挂钩的,近日,华盛顿邮报报道出Zoom存在的重大安全漏洞:数以万计的私人Zoom视频被上传至公开网页,任何人都可在线围观。向华盛顿邮报爆料的是美国国家安全局的前研究员Patrick Jackson,他爆料称在开放的云存储空间中一次性搜到了15000个Zoom视频。其中还有所有参会人员的名字和电话号码,以及...
- 下一篇
智能可视化搭建系统 Atom 服务架构演变
作者:凹凸曼 - Manjiz Atom 是什么?Atom 是集结业内各色资深电商行业设计师,提供一站式专业智能页面和小程序设计服务的平台。经过 2 年紧凑迭代,项目越来越庞大,需求不断变更优化,内部逻辑错综复杂,维护成本急剧拉升。同时,Atom 将要承载的业务越来越多,要向更多的内部用户和商家提供服务,为了适应这些变化,架构升级成为当时紧迫的事项,我们将解构服务端模块,让服务轻量化、模块化,更便捷地拓展业务场景。 Atom 服务端经历了三个版本的迭代,本文着重剖析第三个版本。 架构 1.0 这是 Atom 最古老的一个版本,在这一版本中,只规划了频道页的功能,目的是把开发人员从繁复的频道页开发中解放出来,因为功能目的纯粹,所以系统复杂度较低,服务端直接使用了 Koa 框架上手开发,这是一个单体架构的服务,所有的代码都在一个进程中运行。 在部署方面,运用的是非常原始的手工操作:开发人员登入机器,拉取代码后进行类似本地环境的安装启动,然后在不同机器重复这个过程。 另外,Quark 的旧版本使用的是具名组件,具名组件一定程度限制了 Quark 自身的扩展性,这里不作展开。 架构 2.0 从...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- CentOS7,CentOS8安装Elasticsearch6.8.6
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- SpringBoot2整合Redis,开启缓存,提高访问速度
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- 2048小游戏-低调大师作品
- CentOS7设置SWAP分区,小内存服务器的救世主
- CentOS8编译安装MySQL8.0.19
- CentOS6,CentOS7官方镜像安装Oracle11G
- Docker使用Oracle官方镜像安装(12C,18C,19C)