日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

通過Nginx Ingress訪問集群內WebSocket服務

WebSocket是一種網絡傳輸協議,允許在單個TCP連接上進行雙向通信,位于OSI模型的應用層。與傳統HTTP請求相比,WebSocket使服務端能夠主動向客戶端推送數據,從而實現實時交互,適用于需要即時更新的應用場景,例如在線游戲、金融市場數據傳輸等。遵守WebSocket協議的服務即為WebSocket服務。本文通過示例介紹如何通過Nginx Ingress訪問集群內的WebSocket服務。

前提條件

步驟一:部署示例應用

在集群中部署示例WebSocket應用和服務。

  1. 使用以下內容,創建名為websocket.yaml文件。

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      labels:
        app: ws
      name: websocket-server
      namespace: default
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: ws
      template:
        metadata:
          labels:
            app: ws
        spec:
          containers:
          - image: registry-cn-hangzhou.ack.aliyuncs.com/ack-demo/websocket-echo-server:latest
            imagePullPolicy: IfNotPresent
            name: echo
            env:
             - name: BIND_PORT
               value: "3000"
            ports:
            - containerPort: 3000
              protocol: TCP
            resources:
              limits:
                cpu: 1000m
                memory: 1000Mi
              requests:
                cpu: 100m
                memory: 100Mi
    ---
    apiVersion: v1
    kind: Service
    metadata:
      labels:
        app: ws
      name: websocket-server
      namespace: default
    spec:
      ports:
      - name: ws
        port: 3000
        protocol: TCP
        targetPort: 3000
      selector:
        app: ws
      type: ClusterIP
  2. 執行以下命令,部署示例應用websocket.yaml。

    kubectl apply -f  websocket.yaml

步驟二:部署示例Ingress

為示例Ingress設置代理發送超時時間代理讀取超時時間規則。

  1. 使用以下內容,創建名為websocket-ingress.yaml文件。

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      annotations:
        # 根據實際情況調整讀寫超時時間,默認值為60秒。
        nginx.ingress.kubernetes.io/proxy-read-timeout: "600"  # 設置讀超時時間為600秒。
        nginx.ingress.kubernetes.io/proxy-send-timeout: "600"  # 設置寫超時時間為600秒。
      name: ws
      namespace: default
    spec:
      ingressClassName: nginx
      rules:
      - host: test.example.com
        http:
          paths:
          - backend:
              service:
                name: websocket-server
                port:
                  number: 3000
            path: /
            pathType: ImplementationSpecific
  2. 執行以下命令,部署示例Ingress。

    kubectl apply -f  websocket-ingress.yaml
  3. 執行以下命令,查看該應用的Ingress配置。

    kubectl get ing ws

    預期輸出:

    NAME    HOSTS              ADDRESS       PORTS        AGE                                                         
    ws     test.example.com   47.XX.XX.53     80          8m

步驟三:通過Nginx Ingress訪問WebSocket服務

  1. 執行以下命令,修改/etc/hosts配置文件來進行本地域名解析。

    echo "47.XX.XX.53  test.example.com" | sudo tee -a /etc/hosts
  2. 執行以下命令,訪問WebSocket服務。

    websocat ws://test.example.com/

    預期輸出:

    說明

    WebSocket Server是一個回聲服務,它會將您發送的請求原樣返回。例如當您輸入helloworld和test時,系統會相應地回顯相同的內容。

    2

步驟四: 使用WSS協議訪問WebSocket服務

WSS(WebSocket Secure)協議通過HTTPS為WebSocket通信提供安全保障,確保數據在傳輸過程中得到保護和完整性。在使用WSS協議訪問WebSocket服務之前,需要為域名test.example.com配置HTTPS證書。

  1. 執行以下命令,使用OpenSSL生成的證書。

    openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout tls.key -out tls.crt -subj "/CN=test.example.com/O=test.example.com"
  2. 執行以下命令,創建證書密鑰。

    kubectl create secret tls tls-test-ingress --key tls.key --cert tls.crt
  3. 執行以下命令,編輯websocket-ingress.yaml文件,新增TLS證書內容后保存并退出。

    vim websocket-ingress.yaml
    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      annotations:
        #  根據實際情況調整讀寫超時時間,默認值為60秒。
        nginx.ingress.kubernetes.io/proxy-read-timeout: "600"  # 設置讀超時時間為600秒。
        nginx.ingress.kubernetes.io/proxy-send-timeout: "600"  # 設置寫超時時間為600秒。
      name: ws
      namespace: default
    spec:
      ingressClassName: nginx
      tls:   #  引用TLS證書。
      - hosts:
        - test.example.com   # 證書所對應的域名。
        secretName: tls-test-ingress  # 引用Sercret。 
      rules:
      - host: test.example.com
        http:
          paths:
          - backend:
              service:
                name: websocket-server
                port:
                  number: 3000
            path: /
            pathType: ImplementationSpecific
  4. 執行以下命令,使TLS證書配置生效。

    kubectl apply -f  websocket-ingress.yaml
  5. 執行以下命令,訪問wss://test.example.com/

    說明

    如果使用OpenSSL生成的自簽證書,需要加-k參數,否則會報錯。而如果是受信任的CA簽發的證書,則無需額外參數正常連接即可。

    websocat -k wss://test.example.com/

    預期輸出:

    4

相關文檔