关于kubernetes:K8S集群长连接服务需要配置哪些

10次阅读

共计 2226 个字符,预计需要花费 6 分钟才能阅读完成。

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

tcp 长连贯配置

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

apiVersion: v1
kind: Service
metadata:
  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: xxxxxx
spec:
  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: LoadBalancer
status:
  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: v1
kind: Service
metadata:
  name: link-websocket-svc
  namespace: bsg-prod
  resourceVersion: '493450033'
  selfLink: /api/v1/namespaces/21go-prod/services/link-websocket-svc
  uid: xxxx
spec:
  ports:
    - name: link-websocket
      port: 5151
      protocol: TCP
      targetPort: 5151
  selector:
    app: link
  sessionAffinity: None
  type: ClusterIP
status:
  loadBalancer: {}

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

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  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: xxxx
spec:
  rules:
    - host: link.xx.com
      http:
        paths:
          - backend:
              serviceName: link-websocket-svc
              servicePort: 5151
            path: /
  tls:
    - hosts:
        - link.xx.com
      secretName: app-ingress-secret0
status:
  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 实例。
以上心愿对大家也有所帮忙

正文完
 0