すべてのプロダクト
Search
ドキュメントセンター

Container Service for Kubernetes:Ingressコントローラーを使用したネットワークトラフィックのミラーリング

最終更新日:Dec 10, 2024

クラスター間トラフィックミラーリングは、実稼働環境からステージング環境にトラフィックをミラーリングして、シミュレーションテストを実行したり、問題をトラブルシューティングしたりするプロセスです。 この方法を使用して、本番環境でビジネスを中断することなく、テストを実行し、トラブルシューティングを実行できます。 このトピックでは、NGINX Ingressコントローラーを使用して、Container Service for Kubernetes (ACK) クラスター間のトラフィックをミラーリングする方法について説明します。

前提条件

利用シナリオ

トラフィックミラーリングは、次のシナリオで使用できます。

  • 生産作業負荷シミュレーション:

    システムに重要な変更を加えたり、新機能をリリースする前に、ストレステストを実行してシステムの安定性を評価する必要があります。 ほとんどの場合、運用ワークロードはステージング環境でシミュレートされ、システムがリリースされる前に新しいシステムの安定性をテストします。 しかし、システムが正常なネットワークトラフィックと異常なネットワークトラフィックの両方を受信する可能性があるため、実際の負荷を推定することは困難です。 この問題を解決するには、本番環境に配置されているアプリケーションからのネットワークトラフィックをステージング環境にミラーリングします。 次に、ステージング環境で運用ワークロードをシミュレートできます。

  • トラブルシューティング

    運用環境にデプロイされたシステムでパフォーマンスのボトルネックが発生し、原因を特定できない場合は、システムのネットワークトラフィックをステージング環境にミラーリングできます。 これにより、ステージング環境のエラーをトラブルシューティングできます。

この例では、K8s Product clusterという名前のACKクラスタが本番環境にあり、K8s Stage Clusterという名前のACKクラスタがステージング環境にあります。

準備

K8s製品クラスターからK8sステージクラスターのアプリケーションに100% 本番トラフィックをミラーリングするには、example.com向けのすべてのリクエストをレプリケートし、example1.comにリダイレクトします。

手順1: ステージング環境でのアプリケーションのデプロイ

  1. K8s Stage Clusterでmy-nginx.yamlという名前のファイルを作成し、次の内容をファイルに追加します。

    説明

    ミラーリングされたトラフィックを受信するには、K8sステージクラスターにアプリケーションをデプロイするだけです。 クラスターの構成を変更しないでください。

    apiVersion: apps/v1
    kind: 配置
    メタデータ:
      名前: nginx-deployment
    spec:
      replicas: 1
      セレクタ:
        matchLabels:
          アプリ:nginx
      テンプレート:
        metadata:
          labels:
            アプリ:nginx
        仕様:
          containers:
          -画像: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
            imagePullPolicy: Always
            name: nginx
            ポート:
            - containerPort: 80
              protocol: TCP
          restartPolicy: 常に
    ---
    apiVersion: v1
    種類: サービス
    メタデータ:
      名前: nginx-service
    spec:
      ポート:
      - port: 80
        protocol: TCP
        targetPort: 80
      セレクタ:
        アプリ:nginx
      タイプ: NodePort
    ---
    apiVersion: networking.k8s.io/v1
    kind: Ingress
    メタデータ:
      名前: nginx-ingress
    spec:
      rules:
      -ホスト: example1.com
        http:
          paths:
          - path: /
            backend:
              service: 
                名前: nginx-service
                port:
                  number: 80
            pathType: ImplementationSpecific 
  2. 次のコマンドを実行して、my-nginxアプリケーションをデプロイします。

    kubectl apply -f my-nginx.yaml
  3. 次のコマンドを実行して、Ingress設定を表示します。

    kubectl get ing nginx-ingress

    期待される出力:

    名ホストアドレスポート年齢
    nginx-ingres s example1.com 47。**。53 80 8m 
  4. 次のコマンドを実行して、アプリケーションのドメイン名にアクセスし、ドメイン名解決設定をテストします。

    カール http://example1.com

手順2: 本番環境でのトラフィックミラーリングの設定

説明

アプリケーションがK8s製品クラスターにデプロイされた後、トラフィックミラーリングアノテーションをIngressに追加する必要があります。

  1. K8s製品クラスターにmy-nginx.yamlという名前のファイルを作成し、次の内容をファイルに追加します。

    apiVersion: apps/v1
    kind: 配置
    メタデータ:
      名前: nginx-deployment
    spec:
      replicas: 1
      セレクタ:
        matchLabels:
          アプリ:nginx
      テンプレート:
        metadata:
          labels:
            アプリ:nginx
        仕様:
          containers:
          -画像: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
            imagePullPolicy: Always
            name: nginx
            ポート:
            - containerPort: 80
              protocol: TCP
          restartPolicy: 常に
    ---
    apiVersion: v1
    種類: サービス
    メタデータ:
      名前: nginx-service
    spec:
      ポート:
      - port: 80
        protocol: TCP
        targetPort: 80
      セレクタ:
        アプリ:nginx
      タイプ: NodePort 
  2. 次のコマンドを実行して、my-nginxアプリケーションをデプロイします。

    kubectl apply -f my-nginx.yaml
  3. my-ingress.yamlという名前のファイルを作成し、次のIngress設定をファイルに追加します。

    • nginx.ingress.kubernetes.io/mirror-targetを追加し、ステップ3でK8sステージクラスターのADDRESSに値を設定します。 このアノテーションは、HTTPとHTTPSにのみ適用されます。 詳細については、「ingress-nginx_mirror」をご参照ください。

    • nginx.ingress.kubernetes.io/mirror-hostを追加し、手順3でK8sステージクラスターのHOSTSに値を設定します。

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    メタデータ:
      name: nginx-ingress
      アノテーション:
        nginx.ingress.kubernetes.io/mirror-target: "http:// 47.**.**.53$request_uri"# ミラーリングされたトラフィックの宛先アドレスを指定します。 
        nginx.ingress.kubernetes.io/mirror-request-body: "off"# リクエストボディは送信先に送信されません。 リクエスト本文を宛先に送信するには、このアノテーションを削除します。 
        nginx.ingress.kubernetes.io/mirror-host: "example1.com"# ミラーリングされたトラフィックのHostヘッダーを設定します。 
    仕様:
      rules:
      -host: example.com
        http: 
          paths:
          - path: /
            backend:
              service: 
                名前: nginx-service
                port:
                  number: 80
            pathType: ImplementationSpecific 
  4. 次のコマンドを実行して、Ingressをデプロイします。

    kubectl apply -f my-ingress.yaml
  5. 次のコマンドを実行して、Ingress設定を表示します。

    kubectl get ing nginx-ingress

    期待される出力:

    名ホストアドレスポート年齢
    nginx-ingres s example.com 39.**.**.54 80 1m 
  6. 次のコマンドを実行して、アプリケーションのドメイン名にアクセスできるかどうかを確認します。

    カール http://example.com

設定の確認

K8s製品クラスターのドメイン名example.comにアクセスします。 次のコマンドを実行すると、ドメイン名宛てのリクエストがレプリケートされることが出力に示されます。 複製されたリクエストは、K8s Stage Clusterのアプリケーションにリダイレクトされます。

kubectl -n kube-system logs -- tail=0 -f nginx-ingress-controller-674c96ffbc-9mc 8n

流量复制结果验证