一、背景介绍
Pod是有生命周期的,当一个工作节点(node)销毁时,节点上运行的pods也会被销毁。ReplicationController会动态地在其他节点上创建Pod来保持应用程序的运行,每一个Pod都有一个独立的IP地址,甚至是同一个节点上的Pod。可以看出Pod的IP是动态的,它随Pod的创建而创建,随Pod的销毁而消失,这就引出一个问题:如果由一组Pods组合而成的集群来提供服务,那如何访问这些Pods呢?
Kubenetes的Service就是用来解决这个问题的。一个Service可以看作一组提供相同服务的Pods的对外访问接口,Service作用于哪些Pods是通过label selector来定义的,这些Pods能被Service访问,Pod之间的发现和路由(如应用中的前端和后端组件)由Kubernetes Service处理。
Service有四种type:
- ClusterIP(默认)
- NodePort
- LoadBalancer
- ExternalName
其中NodePort和LoadBalancer两类型的Services可以对外提供服务。
二、基于NodePort配置对外暴露服务
NodePort:对外暴露应用(集群外)。在每个节点上启用一个端口来暴露服务,可以在集群外部访问。
2.1 创建service.yaml
示例代码:
---# serviceapiVersion: v1kind: Servicemetadata:name: web-servicenamespace: web-spacespec:selector:app: web# 指定关联Pod的标签type: NodePort# 这里代表是NodePort类型ports:- port: 8080# Service端口,供内部访问(和clusterIP对应,即ip:8080)protocol: TCP# TCP协议targetPort: 8080# 容器端口nodePort: 30001# 对外暴露的端口,供外部调用
示例图片:
2.2 应用yaml
kubectl create -f service.yaml
参考资料
- k8s学习(四) k8s使用nodeport方式配置service对外暴露服务
- k8s service使用NodePort对外暴露应用