Citrix ADC ingress controller

PrometheusとGrafanaを使用してCitrix ADCのメトリックを表示する

Citrix ADC [メトリックエクスポーターとPrometheusオペレーターを使用して](https://github.com/coreos/prometheus-operator) 、Citrix ADC VPX または CPX 入力デバイスと Citrix ADC CPX(east-west)デバイスを監視できます。

Citrix ADC メトリックエクスポーター

Citrix ADCメトリックエクスポーターは、Citrix ADC 統計情報を収集し、 HTTPを使用してPrometheusにエクスポートするシンプルなサーバーです。その後、Prometheus をデータソースとして Grafana に追加し、Citrix ADC の統計情報をグラフィカルに表示できます。詳しくは、「 Citrix ADC メトリックエクスポーター」を参照してください。

Prometheus・オペレーターを起動

Prometheus Operator には、Kubernetes でサービスを監視する広範な方法があります。はじめに、 このトピックではkube-prometheusとそのマニフェストファイルを使用します。マニフェストファイルは、基本的な作業モデルをデプロイするのに役立ちます。以下のコマンドを使用して Kubernetes 環境に Prometheus Operator をデプロイします。

git clone https://github.com/coreos/kube-prometheus.git
kubectl create -f kube-prometheus/manifests/setup/
kubectl create -f kube-prometheus/manifests/

Prometheus-Operatorをデプロイすると、いくつかのポッドとサービスがデプロイされます。デプロイされた Pod からは、 prometheus-k8s-xx Pod はメトリクスの集約とタイムスタンプ用で、 grafana Pod は視覚化用です。クラスターで実行中のコンテナイメージをすべて表示すると、次の出力が表示されます。

$ kubectl get pods -n monitoring
NAME                                   READY     STATUS    RESTARTS   AGE
alertmanager-main-0                    2/2       Running   0          2h
alertmanager-main-1                    2/2       Running   0          2h
alertmanager-main-2                    2/2       Running   0          2h
grafana-5b68464b84-5fvxq               1/1       Running   0          2h
kube-state-metrics-6588b6b755-d6ftg    4/4       Running   0          2h
node-exporter-4hbcp                    2/2       Running   0          2h
node-exporter-kn9dg                    2/2       Running   0          2h
node-exporter-tpxhp                    2/2       Running   0          2h
prometheus-k8s-0                       3/3       Running   1          2h
prometheus-k8s-1                       3/3       Running   1          2h
prometheus-operator-7d9fd546c4-m8t7v   1/1       Running   0          2h

注: manifests フォルダ内のファイルは相互に依存しているため、作成順序が重要です。特定のシナリオでは、マニフェストファイルが正しく作成されず、Kubernetes からエラーメッセージが表示されることがあります。 この問題を解決するには、 kubectl create -f kube-prometheus/manifests/ コマンドを再実行してください。依存関係が満たされていないために初めて作成されなかった YAML ファイルは、すべてこの時点で作成されます。

Prometheus Pod と Grafana Pod は、NodePorts を通じて公開することをお勧めします。そのためには、 prometheus-service.yaml ファイルおよびgrafana-service.yamlファイルを次のように変更する必要があります。

Prometheus サービスの変更

apiVersion: v1
kind: Service
metadata:
  labels:
    prometheus: k8s
  name: prometheus-k8s
  namespace: monitoring
spec:
  type: NodePort
  ports:
  - name: web
    port: 9090
    targetPort: web
  selector:
    app: prometheus
    prometheus: k8s
<!--NeedCopy-->

prometheus-service.yamlファイルを変更したら、次のコマンドを使用して Kubernetes クラスターに変更を適用します。

kubectl apply -f prometheus-service.yaml

Grafana サービスの変更

apiVersion: v1
kind: Service
metadata:
  name: grafana
  namespace: monitoring
spec:
  type: NodePort
  ports:
  - name: http
    port: 3000
    targetPort: http
  selector:
    app: grafana
<!--NeedCopy-->

grafana-service.yamlファイルを変更したら、次のコマンドを使用して Kubernetes クラスターに変更を適用します。

kubectl apply -f grafana-service.yaml

Citrix ADC メトリックエクスポーターの構成

このトピックでは、 Citrix ADCメトリックエクスポーターをCitrix ADC VPXまたはCPXイングレスまたはCitrix ADC CPX(east-west)デバイスと統合する方法について説明します。

Citrix ADC VPX Ingressデバイス用にCitrix ADCメトリックエクスポーターを構成する

入力側Citrix ADC VPXデバイスを監視するために、Citrix ADCメトリックエクスポーターはKubernetesクラスター内のポッドとして実行されます。Citrix ADC VPX入力デバイスのIPアドレスは、Citrix ADCメトリックエクスポーターの引数として提供されます。ADC にアクセスするためのログイン認証情報を提供するには、シークレットを作成し、mountpath「/mnt/nslogin」にボリュームをマウントします。

kubectl create secret generic nslogin --from-literal=username=<citrix-adc-user> --from-literal=password=<citrix-adc-password> -n <namespace>
<!--NeedCopy-->

エクスポーターをデプロイする YAML ファイルの例を次に示します。

apiVersion: v1
kind: Pod
metadata:
  name: exporter-vpx-ingress
  labels:
    app: exporter-vpx-ingress
spec:
  containers:
    - name: exporter
      image: "quay.io/citrix/citrix-adc-metrics-exporter:1.4.8"
      imagePullPolicy: IfNotPresent
      args:
        - "--target-nsip=<IP_of_VPX>"
        - "--port=8888"
      volumeMounts:
      - name: nslogin
        mountPath: "/mnt/nslogin"
        readOnly: true
      securityContext:
        readOnlyRootFilesystem: true
  volumes:
  - name: nslogin
    secret:
      secretName: nslogin
---
kind: Service
apiVersion: v1
metadata:
  name: exporter-vpx-ingress
  labels:
    service-type: citrix-adc-monitor
spec:
  selector:
    name: exporter-vpx-ingress
  ports:
    - name: exporter-port
      port: 8888
      targetPort: 8888
<!--NeedCopy-->

Citrix ADC VPXデバイスのIPアドレスとポートを--target-nsipパラメータで指定する必要があります。例:--target-nsip=10.0.0.20

Citrix ADC CPX Ingressデバイス用にCitrix ADCメトリックエクスポーターを構成する

Citrix ADC CPX 入力デバイスを監視するために、Citrix ADC メトリックエクスポーターがサイドカーとしてCitrix ADC CPXに追加されます。以下は、エクスポーターをサイドカーとして使用したCitrix ADC CPX入力デバイスのYAMLファイルのサンプルです。

---
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: cpx-ingress
  name: cpx-ingress
spec:
  replicas: 1
  selector:
    matchLabels:
      app: cpx-ingress
  template:
    metadata:
      annotations:
        NETSCALER_AS_APP: "True"
      labels:
        app: cpx-ingress
    spec:
      containers:
      - env:
        - name: EULA
          value: "YES"
        - name: NS_PROTOCOL
          value: HTTP
        - name: NS_PORT
          value: "9080"
        #Define the NITRO port here
        image: quay.io/citrix/citrix-k8s-cpx-ingress:13.0-52.24
        imagePullPolicy: IfNotPresent
        name: cpx-ingress
        ports:
        - containerPort: 80
          name: http
          protocol: TCP
        - containerPort: 443
          name: https
          protocol: TCP
        - containerPort: 9080
          name: nitro-http
          protocol: TCP
        - containerPort: 9443
          name: nitro-https
          protocol: TCP
        securityContext:
          privileged: true
      # Adding exporter as a sidecar
      - args:
        - --target-nsip=192.0.0.2
        - --port=8888
        - --secure=no
        env:
        - name: NS_USER
          value: nsroot
        - name: NS_PASSWORD
          value: nsroot
        image: quay.io/citrix/citrix-adc-metrics-exporter:1.4.8
        imagePullPolicy: IfNotPresent
        name: exporter
        securityContext:
          readOnlyRootFilesystem: true
      serviceAccountName: cpx
---
kind: Service
apiVersion: v1
metadata:
  name: exporter-cpx-ingress
  labels:
    service-type: citrix-adc-monitor
spec:
  selector:
    app: cpx-ingress
  ports:
    - name: exporter-port
      port: 8888
      targetPort: 8888
<!--NeedCopy-->

ここで、エクスポーターはローカルIPアドレス(192.0.0.2)を使用してCitrix ADC CPXからメトリックをフェッチします。

Citrix ADC CPX(east-west)デバイス用にCitrix ADCメトリックエクスポーターを構成する

Citrix ADC CPX(east-west)デバイスを監視するために、Citrix ADCメトリックエクスポーターがサイドカーとしてCitrix ADCCPXに追加されます。以下は、エクスポーターをサイドカーとして使用したCitrix ADC CPX(east-west)デバイスのYAMLファイルのサンプルです。

apiVersion: apps/v1
kind: DaemonSet
metadata:
  annotations:
    deprecated.daemonset.template.generation: "0"
  labels:
    app: cpx-ew
  name: cpx-ew
spec:
  selector:
    matchLabels:
      app: cpx-ew
  template:
    metadata:
      annotations:
        NETSCALER_AS_APP: "True"
      labels:
        app: cpx-ew
      name: cpx-ew
    spec:
      containers:
      - env:
        - name: EULA
          value: "yes"
        - name: NS_NETMODE
          value: HOST
        #- name: "kubernetes_url"
        #  value: "https://10..xx.xx:6443"
        image: quay.io/citrix/citrix-k8s-cpx-ingress:13.0-52.24
        imagePullPolicy: IfNotPresent
        name: cpx
        securityContext:
          privileged: true
      # Add exporter as a sidecar
      - args:
        - --target-nsip=192.168.0.2
        - --port=8888
        - --secure=no
        env:
        - name: NS_USER
          value: nsroot
        - name: NS_PASSWORD
          value: nsroot
        image: quay.io/citrix/citrix-adc-metrics-exporter:1.4.8
        imagePullPolicy: IfNotPresent
        name: exporter
        securityContext:
          readOnlyRootFilesystem: true
      serviceAccountName: cpx
---
kind: Service
apiVersion: v1
metadata:
  name: exporter-cpx-ew
  labels:
    service-type: citrix-adc-monitor
spec:
  selector:
    app: cpx-ew
  ports:
    - name: exporter-port
      port: 8888
      targetPort: 8888
<!--NeedCopy-->

ここで、エクスポーターはローカルIP(192.168.0.2)を使用して、Citrix ADC CPX(east-west)デバイスからメトリックをフェッチします。

Citrix ADCを検出するサービスモニター

Citrix ADCメトリックエクスポーターは、Citrix ADC VPXまたはCPXの入力デバイスおよびCitrix ADC CPX(east-west)デバイスからデータを収集するのに役立ちます。Prometheus Operator はこれらのエクスポーターを検出して、メトリクスにタイムスタンプを付けて保存し、Grafana で可視化できるように公開する必要があります。Prometheus Operator は ServiceMonitors の概念を使用して、そのサービスにアタッチされたラベルを使用して、サービスに属する Pod を検出します。

次の YAML ファイルの例では、 ラベルservice-type: citrix-adc-monitorが関連付けられているすべてのエクスポーターサービス (サンプル YAML ファイル内) を検出します。

apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  name: citrix-adc-servicemonitor
  labels:
    servicemonitor: citrix-adc
spec:
  endpoints:
  - interval: 30s
    port: exporter-port
  selector:
    matchLabels:
      service-type: citrix-adc-monitor
  namespaceSelector:
    matchNames:
    - monitoring
    - default
<!--NeedCopy-->

ServiceMonitor は Prometheus に、 default およびmonitoringネームスペース内のエクスポータのみを検出するように指示します。他の名前空間のエクスポーターを検出するには、 その名前空間の名前をnamespaceSelector:フィールドに追加します。

注:

監視する必要のある Exporter がdefaultまたはmonitoring名前空間以外の名前空間に存在する場合、 それらの名前空間にアクセスするために Prometheus に追加の RBAC 権限を付与する必要があります。以下に、Prometheus に名前空間のリソースへのフルアクセスを提供する YAML (prometheus-clusterRole.yaml) ファイルの例を示します。

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: prometheus-k8s
rules:
- apiGroups:
  - ""
  resources:
  - nodes/metrics
  - namespaces
  - services
  - endpoints
  - pods
  verbs: ["\*"]
- nonResourceURLs:
  - /metrics
  verbs:  ["\*"]
<!--NeedCopy-->

Prometheus の追加権限を付与するには、次のコマンドを使用してサンプル YAML をデプロイします。

kubectl apply -f prometheus-clusterRole.yaml

grafana でメトリクスを表示する

監視対象として検出されたCitrix ADCインスタンスが、prometheusコンテナの[ ターゲット ]ページに表示されます。[ ターゲット ] ページには、 次の URL http://<k8s_cluster_ip>:<prometheus_nodeport>/targetsを使用してアクセスできます。

メトリック

メトリクスをグラフィカルに表示するには:

  1. http://<k8s_cluster_ip>:<grafafa_nodeport>とデフォルトの認証情報を使用してgrafanaにログインする admin: admin

  2. 左側のパネルで [ + ] を選択し、[ インポート ] をクリックしてサンプル grafana ダッシュボードをインポートします

    metrics-graph

    次のようなグラフを含むダッシュボードが表示されます。

    dashboard

    Grafana [のドキュメントやデモビデオを使用して](https://www.youtube.com/watch?v=mgcJPREl3CU)、ダッシュボードをさらに強化できます。

PrometheusとGrafanaを使用してCitrix ADCのメトリックを表示する