目录

1、Service存在的意义:

2、Pod与Service的关系:

1、 Service通过标签关联一组Pod

2.2,service多端口定义:

3、Service常用的三种类型

3.1 ClusterIP:

3.2 NodePort:


1、Service存在的意义:

service引入主要是解决pod的动态变化,提供统一的访问入口:
1、防止pod失联,准备找到提供同一服务的pod(服务发现)
2、定义一组Pod的访问策略(负载均衡)
即访问流程应该是
在前端访问后端时,如果直接绑定pod的ip,当pod进行更新时,pod的ip也会变化,前端无法动态的感知后端的变化。
同时,还面临多个pod副本如何对外统一访问的问题
这里,就需要用到前面的服务发现与负载均衡的概念,

2、Pod与Service的关系:

1、 Service通过标签关联一组Pod

2、Service为一组Pod提供负载均衡能力 
通过
kubectl get ep
可以查看service与他绑定的pod
注意:service与pod绑定是标签绑定,所以标签一定要正确,查看pod标签的命令为
kubectl get pods --show-labels
在service中由selector绑定
一组pod可以定义多组service,deployment也是。他们都是独立的资源,没有依赖性

2.2,service多端口定义:

在实际场景中,可能出现一组pod内运行多容器,里面运行的端口可能是多端口,如图
加入这个pod中有两个端口需要访问,一个80一个12345.这时候就需要使用到service的多端口功能
示例yaml
apiVersion: v1
kind: Service
metadata:
  creationTimestamp: null
  labels:
    app: nginx
  name: web2
spec:
  ports:
  - port: 80
    name: http
    protocol: TCP
    targetPort: 80
  - port: 12345
    name: metrics
    protocol: TCP
    targetPort: 12345
  selector:
    app: nginx
与单端口service 不同,多端口的service每个端口要有name名,否则创建失败
创建成功,有两端口监听

3、Service常用的三种类型

service一共有三种类型,一般用户未配置时service会默认使用clusterIP

3.1 ClusterIP:

默认,分配一个稳定的IP地址,即VIP,只能在集群内部访问。
一般k8s集群中不同项目沟通一般使用clusterip

3.2 NodePort:

在每个节点上启用一个端口来暴露服务,可以在集群 外部访问。也会分配一个稳定内部集群IP地址。
 访问地址:<任意NodeIP>: 默认NodePort端口范围:30000-32767
示例模块
spec:
  type: NodePort
  ports:
  - port: 80
    protocol: TCP
    targetPort: 80
    nodePort: 30009
  selector:
    app: web
nodeport演示
创建service的yaml,绑定已经运行的pod
vi service-nodeport
apiVersion: v1
kind: Service
metadata:
  labels:
    app: nginx
  name: web3
spec:
  type: NodePort
  ports:
  - port: 80
    protocol: TCP
    targetPort: 80
  selector:
    app: nginx
执行yaml
kubectl apply -f service-nodeport
查看k8s的svc,可以看见端口已经暴露
kubectl get svc
访问node的ip加这个生成的端口,访问成功
同时,当用户不指定暴露后的端口,端口会随机生成,如上,但nodeport支持用户指定生成的端口
修改yaml
vi service-nodeportyaml
加入指定端口( 注意,填写端口范围为30000-32767
apiVersion: v1
kind: Service
metadata:
  labels:
    app: nginx
  name: web3
spec:
  type: NodePort
  ports:
  - port: 80
    protocol: TCP
    targetPort: 80
    nodePort: 30002
  selector:
    app: nginx
更新yaml
kubectl apply -f service-nodeport.yaml
查看当前service服务
kubectl get svc
端口已被修改为指定端口
3.2 LoadBalancer:
LoadBalancer:与NodePort类似,在每个节点上启用一个端口来暴 露服务。除此之外,Kubernetes会请求底层云平台(例如阿里云、腾 讯云、AWS等)上的负载均衡器,将每个Node ([NodeIP]:[NodePort])作为后端添加进去。
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐