サービスメッシュトポロジを設定するための詳細な手順
サービスメッシュトポロジを展開するための前提条件については、「 サービスグラフの設定」を参照してください。
NetScaler エージェントの設定
KubernetesクラスターとNetScaler Console間の通信を有効にするには、エージェントをインストールして構成する必要があります。ハイパーバイザー、パブリッククラウドサービス(Microsoft Azure、AWS など)、または NetScaler インスタンスで利用可能な組み込みエージェント(高可用性デプロイに最適)を使用してエージェントを構成できます。
注
既存のエージェントを使用することもできます。
デフォルトでは、エージェントはNetScaler Consoleの最新ビルドに自動的にアップグレードされます。エージェントの詳細は、[ インフラストラクチャ] > [インスタンス] > [エージェント ] ページで確認できます。また、エージェントのアップグレードを実行する時刻を指定することもできます。詳細については、「 エージェントアップグレード設定の指定」を参照してください。
エージェントのスタティックルートを設定
Kubernetes クラスター内では、コンテナー化されたすべての Pod はオーバーレイネットワークを使用します。これらのプライベート IP アドレスを直接使用して通信を確立することはできません。NetScaler ConsoleからKubernetesクラスターへの通信を有効にするには、エージェントで静的ルーティングを構成する必要があります。
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}"
コマンドの実行後の出力例を次に示します。
エージェントを正常に設定したら:
-
SSH クライアントを使用して、エージェントにログオンします。
-
shell
を入力して Enter キーを押してbash
に切り替えます -
コマンド
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
-
netstat -rn
を使用して構成を検証します -
これらのルートコマンドを
/mpsconfig/svm.conf
ファイルに追加します。-
エージェントで、次のコマンドを使用して svm.conf ファイルにアクセスします。
vim /mpsconfig/svm.conf
-
静的ルートを svm.conf ファイルに追加します。
例:
route add -net 192.168.0.0/24 101.xx.xx.112
。
-
必要なパラメータの設定
Kubernetesのマスターで:
-
イングレスゲートウェイ/サイドカーとしてCPXがデプロイされているすべての名前空間で、エージェント認証情報を使用してシークレットを作成します。
kubectl create secret generic admlogin --from-literal=username=<username> --from-literal=password=<password> -n <namespace>
-
helm repo add citrix https://citrix.github.io/citrix-helm-charts/
-
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 コンソールのIPアドレス Null NetScaler CPXでは必須 ADMSettings.ADMFingerPrint NetScaler コンソールのフィンガープリント。[ インフラストラクチャ] > [インスタンス] > [エージェント] に移動し、エージェントを選択して [ フィンガープリントを表示] をクリックします 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では必須 -
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 コンソールの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がサイドカーモードとして実行されているかどうかを示します。 はい -
CPXサイドカーインジェクションが必要な名前空間にラベルを設定します。
kubectl label namespace <app-namespace> cpx-injection=enabled
手順3と5を実行すると、NetScaler CPXがNetScalerコンソールに登録されていることがわかります。
サンプルアプリケーションのデプロイ
次のアプリケーションをデプロイすることを検討してください。
サンプルアプリケーションをデプロイするには、次の手順を実行します。
-
kubectl create namespace citrix-system
-
kubectl create namespace bookinfo
-
kubectl label namespace bookinfo cpx-injection=enabled
-
kubectl create secret generic admlogin --from-literal=username=<uername> --from-literal=password=<password> -n citrix-system
注
ユーザ名とパスワードは任意で入力できます。
-
kubectl create secret generic admlogin --from-literal=username=<username> --from-literal=password=<password> -n bookinfo
注
ユーザ名とパスワードは任意で入力できます。
-
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
注
NetScalerコンソールのフィンガープリントとエージェントIPアドレスを指定する必要があります
-
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
注
NetScalerコンソールのフィンガープリントとエージェントIPアドレスを指定する必要があります
-
helm install bookinfo bookinfo/ --namespace bookinfo --set citrixIngressGateway.namespace=citrix-system
NetScaler コンソールにKubernetesクラスターを追加します
Kubernetesクラスタを追加するには、次の手順に従います。
-
管理者の資格情報を使用してNetScalerコンソールにログオンします。
-
インフラストラクチャ > オーケストレーション > Kubernetes > クラスタに移動します。 [クラスタ] ページが表示されます。
-
[追加] をクリックします。
-
[クラスタの追加 ] ページで、次のパラメータを指定します。
-
[名前]: 任意の名前を指定します。
-
API サーバー URL -Kubernetes マスターノードから API サーバー URL の詳細を取得できます。
-
Kubernetes マスターノードで、コマンド
kubectl cluster-info
を実行します。 -
「Kubernetes マスターが実行中です」と表示される URL を入力します。
-
-
認証トークン -認証トークンを指定します。認証トークンは、KubernetesクラスターとNetScalerコンソール間の通信へのアクセスを検証するために必要です。認証トークンを生成する手順は、次のとおりです。
Kubernetes マスターノードで、次の操作を行います。
-
次の YAML を使用してサービスアカウントを作成します。
apiVersion: v1 kind: ServiceAccount metadata: name: <name> namespace: <namespace> <!--NeedCopy-->
-
kubectl create -f <yaml file>
を実行します。サービスアカウントが作成されます。
-
kubectl create clusterrolebinding <name> --clusterrole=cluster-admin --serviceaccount=<namespace>:<name>
を実行してクラスターロールをサービスアカウントにバインドします。これで、サービスアカウントはクラスター全体にアクセスできるようになりました。
トークンは、サービスアカウントの作成中に自動的に生成されます。
-
kubectl describe sa <name>
を実行してトークンを確認してください。 -
シークレット文字列を取得するには、
kubectl describe secret <token-name>
を実行してください。
-
-
リストからエージェントを選択します。
注
CPX YAMLで追加したのと同じエージェントを選択してください。
-
[作成] をクリックします。
-
ライセンス用の仮想サーバの自動選択を有効にする
注
十分な仮想サーバライセンスがあることを確認してください。詳細については、「 ライセンス」を参照してください。
NetScaler ConsoleにKubernetesクラスターを追加したら、ライセンス対象として仮想サーバーを必ず自動選択する必要があります。Service Graph でデータを表示するには、仮想サーバのライセンスが必要です。仮想サーバを自動選択するには、次の手順で行います。
-
[ 設定]>[NetScaler コンソールのライセンスと分析設定]に移動します。
-
[ 仮想サーバーライセンスの概要] で、 [仮想サーバーの自動選択] と [アドレス指定できない仮想サーバーの自動選択] を有効にします。
WebトランザクションとTCPトランザクション設定を有効にする
Kubernetes クラスターを追加し、自動選択仮想サーバーを有効にした後、[ Web トランザクション設定] と [ TCP トランザクション設定 ]を [ すべて] に変更します。
-
[ 設定] > [ アナリティクス設定]に移動します。
「 設定 」ページが表示されます。
-
[ 分析機能の有効化] をクリックします。
-
「 Webトランザクション設定」で、「 すべて」を選択します。
-
[ TCP トランザクションの設定]で、[ すべて] を選択します。
-
「 OK」をクリックします。
マイクロサービスへのトラフィックの送信
次に、トラフィックをマイクロサービスに送信して、NetScaler Consoleにサービスグラフを入力する必要があります。
-
入力 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}')
-
curl を使用して Bookinfo フロントエンドアプリケーションにアクセスします。
productpage
サービスは 200 OK 応答を返す必要があります。curl -kv https://$INGRESS_HOST:$SECURE_INGRESS_PORT/productpage
curl -v http://$INGRESS_HOST:$INGRESS_PORT/productpage
-
ブラウザから
https://$INGRESS_HOST:$SECURE_INGRESS_PORT/productpage
にアクセスしてください。Bookinfoページが表示されます 。
-
$INGRESS_HOST と $SECURE_INGRESS_PORT が IP アドレスとポート値で置き換えられることを確認します。
トラフィックをマイクロサービスに送信すると、サービスグラフは約 10 分単位で入力されます。
サービスグラフを使用して、メトリック、エラーなどのさまざまなサービスの詳細を分析できます。詳細については、「 サービスグラフ」を参照してください。