中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何通過K8S Ingress Controller來實現應用的流量復制

發布時間:2021-11-09 16:58:01 來源:億速云 閱讀:364 作者:柒染 欄目:云計算

本篇文章給大家分享的是有關如何通過K8S Ingress Controller來實現應用的流量復制,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

如何在阿里云容器服務不同K8S集群內進行應用的流量復制

仿真測試

通常在系統進行重大重構或者發布新功能時,我們都需要進行壓測以事先評估新系統的承載能力,傳統情況下我們一般會在線下環境來模擬線上各種測試數據來對新系統進行測試,但是這種方式往往并不能有效地模擬出線上真實的訪問量,尤其是模擬出正常流量中混雜著各色的異常流量,針對這種情況我們可以通過將線上的應用流量復制到指定的線下環境來對新系統進行仿真測試;另外一種情況假若我們線上系統遇到了性能瓶頸,但是又不能快速地定位出問題點,我們同樣可以采用流量復制的方式來將應用的真實流量引導到線下環境來進行定位。下面主要跟大家分享下如何在阿里云容器服務不同K8S集群內進行應用的流量復制:
如何通過K8S Ingress Controller來實現應用的流量復制

部署基礎應用

這里假設您已經在阿里云容器服務控制臺申請了兩個不同的K8S集群(暫定一個為K8S Product Cluster,一個為K8S Stage Cluster)。

一、在K8S Product Cluster中部署一個應用,并通過Ingress來對外暴露服務訪問:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      # 當前配置為老版本鏡像
      - image: registry.cn-hangzhou.aliyuncs.com/xianlu/old-nginx
        imagePullPolicy: Always
        name: nginx
        ports:
        - containerPort: 80
          protocol: TCP
      restartPolicy: Always
---
apiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
  ports:
  - port: 80
    protocol: TCP
    targetPort: 80
  selector:
    app: nginx
  type: NodePort
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: nginx-ingress
spec:
  rules:
  # 這里配置使用了集群默認域名(您也可以使用自定義域名并作DNS解析)
  - host: nginx.c37bf6b77bded43669ba2fb67448b4146.cn-hangzhou.alicontainer.com
    http:
      paths:
      - path: /
        backend:
          serviceName: nginx-service
          servicePort: 80

二、部署完成后可通過如下命令測試訪問:

  # 查看該應用的ingress配置
  kubectl get ing nginx-ingress
NAME            HOSTS                                                                  ADDRESS         PORTS     AGE
nginx-ingress   nginx.c37bf6b77bded43669ba2fb67448b4146.cn-hangzhou.alicontainer.com   47.110.199.44   80        8m
 
  # 測試訪問應用域名
  curl http://nginx.c37bf6b77bded43669ba2fb67448b4146.cn-hangzhou.alicontainer.com
old

三、在K8S Stage Cluster中部署一個相同應用,同樣通過Ingress來對外暴露服務訪問:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      # 當前配置為新版本鏡像
      - image: registry.cn-hangzhou.aliyuncs.com/xianlu/new-nginx
        imagePullPolicy: Always
        name: nginx
        ports:
        - containerPort: 80
          protocol: TCP
      restartPolicy: Always
---
apiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
  ports:
  - port: 80
    protocol: TCP
    targetPort: 80
  selector:
    app: nginx
  type: NodePort
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: nginx-ingress
spec:
  rules:
  # 這里配置使用了集群默認域名(您也可以使用自定義域名并作DNS解析)
  - host: nginx.c41eb6ca34a3e49f7aea63b8bc9e8ad98.cn-beijing.alicontainer.com
    http:
      paths:
      - path: /
        backend:
          serviceName: nginx-service
          servicePort: 80

四、部署完成后可通過如下命令測試訪問:

 # 查看該應用的ingress配置
 kubectl get ing nginx-ingress
NAME            HOSTS                                                                 ADDRESS        PORTS     AGE
nginx-ingress   nginx.c41eb6ca34a3e49f7aea63b8bc9e8ad98.cn-beijing.alicontainer.com   39.106.233.1   80        1m

 # 測試訪問應用域名
 curl http://nginx.c41eb6ca34a3e49f7aea63b8bc9e8ad98.cn-beijing.alicontainer.com
new

配置流量復制

這里假設我們希望將K8S Product Cluster中該應用 100% 的訪問流量復制到K8S Stage Cluster中對應的應用服務上,即將所有訪問域名nginx.c37bf6b77bded43669ba2fb67448b4146.cn-hangzhou.alicontainer.com的請求復制轉發一份到nginx.c41eb6ca34a3e49f7aea63b8bc9e8ad98.cn-beijing.alicontainer.com上:
如何通過K8S Ingress Controller來實現應用的流量復制cdn.com/fd9845ba32c0dd0fd7322a8e90db229eeeb0827f.png">

說明:由于K8S Stage Cluster Ingress僅僅只作為復制流量的接收方,因此它不需要做任何配置修改,這里我們只需要在K8S Product Cluster Ingress上進行配置即可。

一、配置復制流量百分比和接收復制流量的應用域名

通過如下命令來修改K8S Ingress Controller的ConfigMap配置增加http-snippet配置片段,配置期望的復制流量百分比和接收復制流量的目標應用域名:

  ~ kubectl -n kube-system edit cm nginx-configuration

配置如下KV對:

 http-snippet: |
   split_clients "$date_gmt">

二、配置流量復制

這里我們通過configuration-snippet和server-snippet來修改源Ingress增加應用的流量復制配置(YAML參考如下):

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: nginx-ingress
  annotations:
    nginx.ingress.kubernetes.io/configuration-snippet: |
        mirror /mirror;
    nginx.ingress.kubernetes.io/server-snippet: |
        location = /mirror {
            internal;
            set $shadow_service_name    "nginx-product-service";
            proxy_set_header X-Shadow-Service  $shadow_service_name;
            proxy_pass http://$mirror_servers$request_uri;
        }
spec:
  rules:
  - host: nginx.c37bf6b77bded43669ba2fb67448b4146.cn-hangzhou.alicontainer.com
    http:
      paths:
      - path: /
        backend:
          serviceName: nginx-service
          servicePort: 80

至此,基于K8S Ingress Controller的應用流量復制配置已經完成。

測試流量復制

這里我們嘗試訪問K8S Product Cluster中的應用域名nginx.c37bf6b77bded43669ba2fb67448b4146.cn-hangzhou.alicontainer.com,可以看到每次請求K8S Product Cluster中的Ingress應用域名時,其都將復制一份同樣的請求轉發到K8S Stage Cluster中對應的應用服務中:

如何通過K8S Ingress Controller來實現應用的流量復制

同時,由于前面我們在流量復制配置中配置了proxy_set_header X-Shadow-Service $shadow_service_name,因此在K8S Stage Cluster目標應用接收的請求中,都會攜帶一個X-Shadow-Service頭來指明該鏡像流量來源于哪個線上應用。

以上就是如何通過K8S Ingress Controller來實現應用的流量復制,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

阿鲁科尔沁旗| 大埔区| 丹寨县| 嵊泗县| 遂川县| 巴林左旗| 吉安市| 义乌市| 化德县| 二连浩特市| 漳浦县| 永清县| 洛南县| 文成县| 永善县| 古田县| 富民县| 乌拉特前旗| 仙桃市| 延安市| 阿巴嘎旗| 长垣县| 平武县| 永登县| 合肥市| 博爱县| 沁阳市| 金寨县| 石狮市| 黄山市| 东宁县| 乌拉特前旗| 开原市| 乐东| 柯坪县| 蒲城县| 梁山县| 石城县| 沁源县| 博白县| 晋中市|