サービスメッシュトポロジを設定するための詳細な手順

サービスメッシュトポロジを展開するための前提条件については、「 サービスグラフの設定」を参照してください

NetScaler ADM で静的ルートを構成する

Kubernetes クラスター内では、コンテナー化されたすべての Pod はオーバーレイネットワークを使用します。これらのプライベート IP アドレスを直接使用して通信を確立することはできません。NetScaler ADMからKubernetesクラスターへの通信を有効にするには、NetScaler ADMで静的ルーティングを構成する必要があります。

オンプレミスエージェントを使用している場合は、必ずエージェントにスタティックルートを設定してください。SSHクライアントを使用してNetScaler ADMエージェントにログオンし、静的ルートを構成します。

Kubernetes クラスターの次の IP アドレスがあるとします。

  • Kubernetes master – 101.xx.xx.112

  • Kubernetes worker 1 – 101.xx.xx.111

  • Kubernetes worker 2 – 101.xx.xx.110

Kubernetes マスターで、次のコマンドを実行して、静的ルーティングを行う Pod ネットワークを特定します。

kubectl get nodes -o jsonpath="{range .items[*]}{'podNetwork: '}{.spec.podCIDR}{'\t'}{'gateway: '}{.status.addresses[0].address}{'\n'}{end}"

コマンドの実行後の出力例を次に示します。

コマンドの例

  1. SSHクライアントを使用してNetScaler ADM にログオンする

  2. コマンドroute add -net <public IP address range> <Kubernetes IP address>を使用して、静的ルーティングを設定します。

    次に例を示します:

    route add -net 192.168.0.0/24 101.xx.xx.112

    route add -net 192.168.1.0/24 101.xx.xx.111

    route add -net 192.168.2.0/24 101.xx.xx.110

  3. netstat -rnを使用して構成を検証します

    スタティックルーティング

  4. これらのルートコマンドを /mpsconfig/svm.conf ファイルに追加します。

    1. NetScaler ADM では、 次のコマンドを使用してsvm.confファイルにアクセスします

      vim /mpsconfig/svm.conf

    2. 静的ルートを svm.conf ファイルに追加します。

      例:route add -net 192.168.0.0/24 101.xx.xx.112

必要なパラメータの設定

Kubernetesのマスターで:

  1. 入力ゲートウェイ/サイドカーとしてのCPXがデプロイされるすべての名前空間で、ADMエージェント認証情報を使用してシークレットを作成します。

    kubectl create secret generic admlogin --from-literal=username=<username> --from-literal=password=<password> -n <namespace>

  2. helm repo add citrix https://citrix.github.io/citrix-helm-charts/

  3. NetScaler CPXを入力ゲートウェイとして展開する

    helm install citrix-adc-istio-ingress-gateway citrix/citrix-adc-istio-ingress-gateway --version 1.2.1 --namespace <namespace> --set ingressGateway.EULA=YES,citrixCPX=true,ADMSettings.ADMFingerPrint=XX:00:X1:00:XX:0X:X0,ADMSettings.ADMIP=<xx.xx.xx.xx>, ingressGateway.image=quay.io/citrix/citrix-k8s-cpx-ingress,ingressGateway.tag=13.0-58.30

    次の表に、Helm チャートで設定可能なパラメータとそのデフォルト値を示します。

    パラメーター 説明 デフォルト オプション/必須 (ヘルム)
    CitrixCPX NetScaler CPX FALSE NetScaler CPXでは必須
    xDSAdaptor.image Citrix xDSアダプタコンテナの画像 quay.io/citrix/citrix-istio-adaptor:1.2.1 固定
    ADMSettings.ADMIP NetScaler ADM IPアドレス Null NetScaler CPXでは必須
    ADMSettings.ADMFingerPrint NetScaler ADMフィンガープリント。[ 設定] > [管理] に移動し、[ システム構成 ] の [ フィンガープリントの表示] をクリックします。 Null オプション
    ingressGateway.EULA エンドユーザー使用許諾契約 (EULA) の利用規約。はいの場合、ユーザーはEULAの利用規約に同意します。 いいえ NetScaler CPXでは必須
    ingressGateway.image 入力ゲートウェイとして実行するように指定されたNetScaler ADC CPXの画像 quay.io/Citrix/Citrix k8s-cpx-ingres: 13.0—58.30 NetScaler CPXでは必須
  4. Citrix SideCar インジェクタを展開します。

    helm install cpx-sidecar-injector citrix/citrix-cpx-istio-sidecar-injector --version 1.2.1 --namespace <namespace> set cpxProxy.EULA=YES,ADMSettings.ADMFingerPrint=xx:xx:xx:xx,ADMSettings.ADMIP=<xx.xx.xx.xx>,cpxProxy.image=quay.io/citrix/citrix-k8s-cpx-ingress,cpxProxy.tag=13.0-58.30

    次の表に、Helm チャートで設定可能なパラメータとそのデフォルト値を示します。

    パラメーター 説明 デフォルト値
    ADMSettings.ADMIP NetScaler ADM IPアドレス NIL
    cpxProxy.image サイドカープロキシとして使用されるNetScaler ADC CPXイメージ quay.io/Citrix/Citrix k8s-cpx-ingres: 13.0—58.30
    cpxproxy.imagePullPolicy NetScaler ADCのイメージプルポリシー ifNotPresent
    cpxProxy.EULA エンドユーザー使用許諾契約 (EULA) の利用規約。はいの場合、ユーザーはEULAの利用規約に同意します。 いいえ
    cpxproxy.cpxSideCarMode NetScaler CPXの環境変数。これは、NetScaler CPXがサイドカーモードとして実行されているかどうかを示します。 はい
  5. CPXサイドカーインジェクションが必要な名前空間にラベルを設定します。

    kubectl label namespace <app-namespace> cpx-injection=enabled

    手順3と5を実行すると、NetScaler CPXがNetScaler ADMに登録されていることがわかります。

サンプルアプリケーションのデプロイ

次のアプリケーションをデプロイすることを検討してください。

サンプルアプリのデプロイ

サンプルアプリケーションをデプロイするには、次の手順を実行します。

  1. kubectl create namespace citrix-system

  2. kubectl create namespace bookinfo

  3. kubectl label namespace bookinfo cpx-injection=enabled

  4. kubectl create secret generic admlogin --from-literal=username=<uername> --from-literal=password=<password> -n citrix-system

    ユーザ名とパスワードは任意で入力できます。

  5. kubectl create secret generic admlogin --from-literal=username=<username> --from-literal=password=<password> -n bookinfo

    ユーザ名とパスワードは任意で入力できます。

  6. helm install citrix-adc-istio-ingress-gateway citrix/citrix-adc-istio-ingress-gateway --version 1.2.1 --namespace citrix-system --set ingressGateway.EULA=YES,citrixCPX=true,ADMSettings.ADMFingerPrint=xx:xx:xx:xx,ADMSettings.ADMIP=<ADM agent IP address>,ingressGateway.image=quay.io/citrix/citrix-k8s-cpx-ingress,ingressGateway.tag=13.0-58.30

    ADM フィンガープリントと ADM エージェントまたは ADM IP アドレスを指定する必要があります

  7. helm install cpx-sidecar-injector citrix/citrix-cpx-istio-sidecar-injector --namespace citrix-system --set cpxProxy.EULA=YES,ADMSettings.ADMFingerPrint=xx:xx:xx:xx,ADMSettings.ADMIP=<ADM agent IP address>,cpxProxy.image=quay.io/citrix/citrix-k8s-cpx-ingress,cpxProxy.tag=13.0-58.30

    ADM フィンガープリントと ADM エージェントまたは ADM IP アドレスを指定する必要があります

  8. helm install bookinfo bookinfo/ --namespace bookinfo --set citrixIngressGateway.namespace=citrix-system

NetScaler ADM で Kubernetes クラスターを追加する

Kubernetesクラスタを追加するには、次の手順に従います。

  1. 管理者の資格情報を使用してNetScaler ADM にログオンします。

  2. オーケストレーション > Kubernetes > クラスタに移動します。 [クラスタ] ページが表示されます。

  3. [追加] をクリックします。

  4. [クラスタの追加 ] ページで、次のパラメータを指定します。

    1. [名前]: 任意の名前を指定します。

    2. API サーバー URL -Kubernetes マスターノードから API サーバー URL の詳細を取得できます。

      1. Kubernetes マスターノードで、コマンドkubectl cluster-infoを実行します。

        API サーバーの URL

      2. 「Kubernetes マスターが実行中です」と表示される URL を入力します。

    3. 認証トークン -認証トークンを指定します。認証トークンは、KubernetesクラスタとNetScaler ADM 間の通信へのアクセスを検証するために必要です。認証トークンを生成する手順は、次のとおりです。

      Kubernetes マスターノードで、次の操作を行います。

      1. 次の YAML を使用してサービスアカウントを作成します。

        apiVersion: v1
        kind: ServiceAccount
        metadata:
          name: <name>
          namespace: <namespace>
        <!--NeedCopy-->
        
      2. kubectl create -f <yaml file>を実行します。

        サービスアカウントが作成されます。

      3. kubectl create clusterrolebinding <name> --clusterrole=cluster-admin --serviceaccount=<namespace>:<name> を実行してクラスターロールをサービスアカウントにバインドします。

        これで、サービスアカウントはクラスター全体にアクセスできるようになりました。

        トークンは、サービスアカウントの作成中に自動的に生成されます。

      4. kubectl describe sa <name> を実行してトークンを確認してください。

      5. シークレット文字列を取得するには、 kubectl describe secret <token-name>を実行してください。

        トークンの生成

    4. リストからエージェントを選択します。

      ADM エージェントを使用している場合は、CPX YAML に追加したものと同じエージェントを選択してください。

    5. [作成] をクリックします。

      クラスタの追加

ライセンス用の仮想サーバの自動選択を有効にする

十分な仮想サーバライセンスがあることを確認してください。詳細については、「 ライセンス」を参照してください。

NetScaler ADM でKubernetesクラスタを追加した後、ライセンス取得のために仮想サーバーを自動的に選択する必要があります。Service Graph でデータを表示するには、仮想サーバのライセンスが必要です。仮想サーバを自動選択するには、次の手順で行います。

  1. [ 設定] > [ライセンスと分析の設定]に移動します。

  2. [ 仮想サーバーライセンスの概要] で、 [仮想サーバーの自動選択][アドレス指定できない仮想サーバーの自動選択] を有効にします。

    仮想サーバを自動選択

WebトランザクションとTCPトランザクション設定を有効にする

Kubernetes クラスターを追加し、自動選択仮想サーバーを有効にした後、[ Web トランザクション設定] と [ TCP トランザクション設定 ]を [ すべて] に変更します。

  1. [ 設定] > [アナリティクス設定]に移動します。

    [アナリティクス設定] ページが表示されます。

  2. [ 分析機能の有効化] をクリックします。

  3. Webトランザクション設定」で、「 すべて」を選択します。

    web-transaction-settings

  4. [ TCP トランザクションの設定]で、[ すべて] を選択します。

    TCP

  5. [OK] をクリックします。

マイクロサービスへのトラフィックの送信

次に、トラフィックをマイクロサービスに送信して、NetScaler ADM に表示されるサービスグラフを取得する必要があります。

  1. 入力 IP とポートの確認

    export INGRESS_HOST=$(kubectl get pods -l app=citrix-ingressgateway -n citrix-system -o 'jsonpath={.items[0].status.hostIP}')

    export INGRESS_PORT=$(kubectl -n citrix-system get service citrix-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="http2")].nodePort}')

    export SECURE_INGRESS_PORT=$(kubectl -n citrix-system get service citrix-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="https")].nodePort}')

  2. cURL を使用して Bookinfo フロントエンドアプリケーションにアクセスします。productpage サービスは 200 OK 応答を返す必要があります。

    curl -kv https://$INGRESS_HOST:$SECURE_INGRESS_PORT/productpage

    curl -v http://$INGRESS_HOST:$INGRESS_PORT/productpage

  3. ブラウザからhttps://$INGRESS_HOST:$SECURE_INGRESS_PORT/productpageにアクセスしてください。

    Bookinfoページが表示されます

  4. $INGRESS_HOST と $SECURE_INGRESS_PORT が IP アドレスとポート値で置き換えられることを確認します。

トラフィックをマイクロサービスに送信すると、サービスグラフは約 10 分単位で入力されます。

Sample

サービスグラフを使用して、メトリック、エラーなどのさまざまなサービスの詳細を分析できます。詳細については、「 サービスグラフ」を参照してください。

サービスメッシュトポロジを設定するための詳細な手順