43. Kubernetes深入Service-Service资源创建

释放双眼,带上耳机,听听看~!

Service资源本身并不提供任何服务,真正处理并响应客户端请求的是后端的Pod资源,因此Service资源通常要与控制器资源协同使用来完成应用的创建和对外发布。

创建Service资源

1.创建Service配置清单
Service资源通过标签选择器关联至为nginx-proxy的Pod对象,它会自动创建名称为 nginx-proxyEndpoints资源对象,并自动配置一个Cluster IP,暴露的端口由port字段进行指定,后端各Pod对象的端口则由targetPort给出,也可以使用同port字段的默认值。

cat nginx-svc.yaml
apiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
  ports:
  - port: 80
    protocol: TCP
    targetPort: 80
  selector:
    app: nginx-proxy            #需要于Pod的标签一致
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deploy
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx-proxy          #选中Pod的标签后才能管控它
  template:
    metadata:
      labels:
        app: nginx-proxy            #定义Pod标签
    spec:
      containers:
      - name: nginx-proxy
        image: nginx:latest
        ports:
        - containerPort: 80
          name: http

2.查看创建的资源对象

kubectl get svc,deploy,pods -o wide
NAME                    TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)   AGE   SELECTOR
service/kubernetes      ClusterIP   10.96.0.1      <none>        443/TCP   32d   <none>
service/nginx-service   ClusterIP   10.105.69.55   <none>        80/TCP    13s   app=nginx-proxy

NAME                           READY   UP-TO-DATE   AVAILABLE   AGE   CONTAINERS    IMAGES         SELECTOR
deployment.apps/nginx-deploy   0/3     3            0           13s   nginx-proxy   nginx:latest   app=nginx-proxy

NAME                                READY   STATUS              RESTARTS   AGE   IP       NODE         NOMINATED NODE   READINESS GATES
pod/nginx-deploy-796cccd9f9-bk7xm   0/1     ContainerCreating   0          13s   <none>   k8s-node01   <none>           <none>
pod/nginx-deploy-796cccd9f9-jqwwt   0/1     ContainerCreating   0          13s   <none>   k8s-node03   <none>           <none>
pod/nginx-deploy-796cccd9f9-r4kmg   0/1     ContainerCreating   0          13s   <none>   k8s-node02   <none>           <none>

上面的输入结果显示,nginx-service的类型默认为ClusterIP,其使用的地址自动配置为10.105.69.55,ClusterIP类型的Service对象仅能通过此IP地址接受来自集群内的客户端Pod中的请求,若集群中存在nginx-proxy标签的Pod,则自动会于nginx-service进行关联,成为nginx-service的Endpoints对象,并负责接收相应的请求流量。

查看Service所关联的Endpoints

kubectl get endpoints nginx-service
NAME            ENDPOINTS                                       AGE
nginx-service   10.244.2.96:80,10.244.3.17:80,10.244.5.133:80   6m52s

通过kubectl describe命令也可以查看到nginx-service关联的内容

kubectl describe service nginx-service
Name:              nginx-service
Namespace:         default
Labels:            <none>
Annotations:       Selector:  app=nginx-proxy
Type:              ClusterIP
IP:                10.105.69.55
Port:              <unset>  80/TCP
TargetPort:        80/TCP
Endpoints:         10.244.2.96:80,10.244.3.17:80,10.244.5.133:80
Session Affinity:  None
Events:            <none>

向Service对象发起请求

打开三个窗口,分别动态查看三个Pod的日志,然后多次请求Service的ClusterIP,并查看调度结果。

当前Kubernetes集群的Service代理模式为iptables,它默认使用随机调度算法,经过上面我们反复请求,可以看到调度结果并不是轮询,而是Service将请求随机调度至关联的某个后端的Pod对象上。

Service会话粘性

Service资源还支持Session affinity粘性会话机制,它能够将来自同一个客户端的请求始终转发到同一个后端Pod对象,那么如果这样将会影响调度算法的流量分发功能,降低负载均衡的效果。

Session affinity粘性会话仅会在一定时间期限内生效,默认值是10800秒,超出此时长之后,客户端的再次访问会被重新调度。

Session affinity粘性会话机制还能基于客户端IP地址就识别客户端身份,它会把由同一个NAT服务器进行原地址转换的所有客户端识别为同一个客户端,调度粒度粗糙效果不佳,因此,实践中不推荐使用此种方法实现粘性会话。

Service资源通过spec.sessionAffinity字段用于定义要使用粘性会话的类型,它仅能支持NoneClientIP两种属性值。

  • None:不使用sessionAffinity的默认值。
  • Client IP:基于客户端IP地址识别客户端身份,把来自同一个源IP地址的请求始终调度到同一个后端Pod对象之上。

在启用粘性会话机制时,spec.sessionAffinityConfig用于配置其会话保持的时长,默认值是10800秒,可选值范围是1~86400,它是一个嵌套字段,使用格式如下所示:

cat nginx-svc.yaml
apiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
  sessionAffinity: ClientIP
  sessionAffinityConfig:
    clientIP:
      timeoutSeconds: 60
  ports:
  - port: 80
    protocol: TCP
    targetPort: 80
  selector:
    app: nginx-proxy

创建并测试其粘性机制

kubectl apply -f nginx-svc.yaml

测试结果如下,访问几次都被调度到相同的后端Pod对象之上

Ops工具

42. Kubernetes深入Service-Service代理模式

2020-6-22 10:25:44

Ops工具

44. Kubernetes深入Service-Service端口暴露

2020-6-22 10:28:27

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索