サービスメッシュトポロジ設定の詳細手順

サービスメッシュトポロジを展開するための前提条件は、サービスグラフの設定で確認できます。

NetScaler® ADMでの静的ルート設定

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

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

Kubernetesクラスターに以下のIPアドレスがあると仮定します。

  • Kubernetesマスター – 101.xx.xx.112

  • Kubernetesワーカー 1 – 101.xx.xx.111

  • Kubernetesワーカー 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チャートで設定可能なパラメータとそのデフォルト値を示します。

    パラメータ 説明 デフォルト 必須/任意 (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のフィンガープリント。Settings > Adminstration に移動し、System Configurations の下の View Fingerprint をクリックします。 null 任意
    ingressGateway.EULA エンドユーザーライセンス契約 (EULA) の利用規約。はいの場合、ユーザーはEULAの利用規約に同意します。 NO NetScaler CPXに必須
    ingressGateway.image イングレスゲートウェイとして実行するように指定されたNetScaler CPXのイメージ quay.io/citrix/citrix-k8s-cpx-ingress:13.0–58.30 NetScaler CPXに必須
  4. Citrix SideCar Injectorを展開します。

    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 CPXイメージ quay.io/citrix/citrix-k8s-cpx-ingress:13.0–58.30
    cpxProxy.imagePullPolicy NetScalerのイメージプルポリシー IfNotPresent
    cpxProxy.EULA エンドユーザーライセンス契約 (EULA) の利用規約。はいの場合、ユーザーはEULAの利用規約に同意します。 NO
    cpxProxy.cpxSidecarMode NetScaler CPXの環境変数。NetScaler CPXがサイドカーモードで実行されているかどうかを示します。 YES
  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. Orchestration > Kubernetes > Cluster に移動します。 [クラスター] ページが表示されます。

  3. Add をクリックします。

  4. Add Cluster ページで、以下のパラメータを指定します。

    1. Name - 任意の名前を指定します。

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

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

        APIサーバーURL

      2. “Kubernetes master is running at.” に表示されるURLを入力します。

    3. Authentication Token - 認証トークンを指定します。認証トークンは、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. Create をクリックします。

      クラスターの追加

ライセンス付与のための仮想サーバー自動選択の有効化

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

NetScaler ADMにKubernetesクラスターを追加した後、ライセンス付与のために仮想サーバーを自動選択するように設定する必要があります。サービスグラフにデータを表示するには、仮想サーバーにライセンスが付与されている必要があります。仮想サーバーを自動選択するには:

  1. Settings > Licensing & Analytics Configuration に移動します。

  2. Virtual Server License Summary で、Auto-select Virtual ServersAuto-select non addressable Virtual Servers を有効にします。

    仮想サーバーの自動選択

WebトランザクションとTCPトランザクション設定の有効化

Kubernetesクラスターを追加し、仮想サーバーの自動選択を有効にした後、Web Transaction SettingsTCP Transactions SettingsAll に変更します。

  1. Settings > Analytics Settings に移動します。

    [Analytics Settings] ページが表示されます。

  2. Enable Features for Analytics をクリックします。

  3. Web Transaction SettingsAll を選択します。

  4. TCP Transactions SettingsAll を選択します。

    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分でサービスグラフがNetScaler ADMに生成されます。

サンプル

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