service

mac2022-06-30  30

service作用: 可以为一组具有相同功能的容器应用提供一个统一的入口地址,并且将请求负载分发到后端的各个容器应用上,实现分布式应用统一入口和负载均衡机制; 注意: pod和service都是kubernetes集群范围内的虚拟概念, 集群外的客户端无法通过podip或service的虚拟ip和虚拟端口访问它们, 为什么需要service:

1.pod的ip地址不可靠 2.容器进行分布式部署, 通过多个实例提供共同服务, 需要在这些实例前面设置一个负载均衡器来实现请求的分发

kubernetes支持两种分发策略:

1.RoundRobin : 默认模式, 轮询模式, 既轮询将请求转发到后端的各个pod上 2.SessionAffinity: 基于客户端ip地址进行会话保持的模式, 可以使用service.spec.sessionAffinity=ClientIP基于客户端会话保持

1)service基本用法

apiVersion: v1 kind: Service metadata: name: nginx-service namespace: default labels: app: nginx spec: sessionAffinity: None selector: app: nginx ports: - name: http port: 80 protocol: TCP targetPort: 80 #说明: port: 80 name为service name, port 为service port, targetPort为pod容器port, selector是后端pod拥有的label, sessionAffinity: None表示分发策略为RoundRobin

2)service用法: 多端口

apiVersion: v1 kind: Service metadata: name: nginx-service namespace: default labels: app: nginx spec: sessionAffinity: None selector: app: nginx ports: - name: http port: 80 protocol: TCP targetPort: 80 - name: https port: 443 protocol: TCP targetPort: 443

3)service用法: headless service(无头service) 无头service特点:

1. 解析service name返回pod的ip列表, 客户端可以自己觉得那个real server 2. 在statefulset中会为每个pod分配一个dns记录, {pod name}.{service name} apiVersion: v1 kind: Service metadata: name: nginx-service namespace: default labels: app: nginx spec: sessionAffinity: None selector: app: nginx clusterIP: None ports: - name: http port: 80 protocol: TCP targetPort: 80

4)service用法: node port 集群外访问pod

apiVersion: v1 kind: Service metadata: name: nginx-service namespace: default labels: app: nginx spec: type: NodePort selector: app: nginx ports: - name: http port: 80 protocol: TCP targetPort: 80 NodePort: 8888 #注意: NodePort: 8888 可以指定, 也可以不指定

转载于:https://www.cnblogs.com/lovelinux199075/p/11251668.html

最新回复(0)