所谓长连贯,个别咱们所说的就是基于tcp协定长时间放弃连贯。我自个分成2种,一种就是tcp长连贯,另外一种就是Websocket,简称ws,基于tcp的长连贯,通过HTTP/1.1 协定的101状态码进行握手。
在开发我的项目时,有可能这2种都会有遇到。这里记录下在K8s中如何进行配置以及注意事项。

tcp长连贯配置

在k8s中,咱们须要创立长连贯我的项目的服务svc,如果须要对外对外裸露提供接口,后面能够创立一个slb负载平衡实例,slb默认是基于4层tcp协定,提供80和443端口,咱们能够借助阿里云控制台创立也能够yaml创立长连贯svc服务

apiVersion: v1kind: Servicemetadata:  annotations:    service.beta.kubernetes.io/alicloud-loadbalancer-id: lb-xxxxx  name: link-tcp-socket-svc  namespace: bsg-prod  resourceVersion: '493439928'  selfLink: /api/v1/namespaces/bsg-prod/services/link-tcp-socket-svc  uid: xxxxxxspec:  externalTrafficPolicy: Local  healthCheckNodePort: 31694  ports:    - name: link-80      nodePort: 31495      port: 80      protocol: TCP      targetPort: 5150    - name: link-443      nodePort: 30254      port: 443      protocol: TCP      targetPort: 5150  selector:    app: link  sessionAffinity: None  type: LoadBalancerstatus:  loadBalancer:    ingress:      - ip: xx.xx.xx.xx

创立好之后,slb配置tcp监听端口80和443即可,很简略。

Websocket配置

个别线上须要配置wss,即对ws加密,因为wss是通过https进行长连贯的,对外裸露接口时就须要配置https协定监听端口(须要配置证书)。先说下配置的大抵思路:slb(tcp)→ingress(https)→后端服务
在k8s中,因为配置的后端服务和Web服务器都是通过ingress-nginx来路由的,svc服务配置ClusterIP类型,再通过slb裸露进来,十分不便。
创立link-svc.yaml服务:

apiVersion: v1kind: Servicemetadata:  name: link-websocket-svc  namespace: bsg-prod  resourceVersion: '493450033'  selfLink: /api/v1/namespaces/21go-prod/services/link-websocket-svc  uid: xxxxspec:  ports:    - name: link-websocket      port: 5151      protocol: TCP      targetPort: 5151  selector:    app: link  sessionAffinity: None  type: ClusterIPstatus:  loadBalancer: {}

长连贯服务创立的deployment就不说了,同时上面还须要创立link-ingress.yaml:

apiVersion: extensions/v1beta1kind: Ingressmetadata:  annotations:    nginx.ingress.kubernetes.io/service-weight: ''    proxy-read-timeout: '10800'    proxy-send-timeout: '10800'  generation: 3  name: link-websocket-ingress  namespace: bsg-prod  resourceVersion: '493601690'  selfLink: >-    /apis/extensions/v1beta1/namespaces/bsg-prod/ingresses/link-websocket-ingress  uid: xxxxspec:  rules:    - host: link.xx.com      http:        paths:          - backend:              serviceName: link-websocket-svc              servicePort: 5151            path: /  tls:    - hosts:        - link.xx.com      secretName: app-ingress-secret0status:  loadBalancer:    ingress:      - ip: xxxx

ingress配置2点阐明:
1.须要配置proxy-read-timeout和proxy-send-timeout值大于3600s即可;相干文档链接 https://kubernetes.github.io/...
2.配置https证书,上传证书密钥

疑难

可能会有人对wss会有疑难,既然wss是基于https协定属于7层的,为何后面slb还是tcp协定监听的,为何不间接用http监听?
因为slb的tcp是能够转发透传到http的,另外阿里云k8s默认创立后的slb就是tcp协定,所以没必用再独自创立一个http协定的slb实例。
以上心愿对大家也有所帮忙