環境の準備

ハイブリッドデプロイメントをインストールする前に、仮想アプライアンスとオンプレミスコントローラ間の安全なシームレス コミュニケーションを確保して環境を準備します。次のセクションで説明するように、入力コントローラ、Splunk AppDynamics オンプレミス コントローラ、およびデータベースの証明書とキーを含む必要なすべてのアーティファクトを収集してコピーします。

これにより、仮想アプライアンスでは Splunk AppDynamics オンプレミス コントローラとの暗号化された通信チャネルが安全に接続、認証、および確立されて、信頼性の高い動作が実現します。

ハイブリッドデプロイメントの概要

3 ノードクラスタの作成

  1. プライマリノードコンソールにログインします。
  2. クラスタの各ノードのブートステータスを確認します。
    CODE
    appdctl show boot
    注:
    • 各ノードのサービスのステータスが [Success] と表示されていることを確認します。それ以外の場合は、失敗した仮想マシンを再起動します。それでも失敗する場合は、仮想マシンを再展開する必要があります。

    • すべてのクラスタノードで同じ時刻を設定してください。

    サンプル出力:

    CODE
    NAME             | STATUS    | ERROR
    ------------------+-----------+-------
     enable-time-sync | Succeeded | --
     firewall-setup   | Succeeded | --
     hostname         | Succeeded | --
     microk8s-setup   | Succeeded | --
     ssh-setup        | Succeeded | --
     storage-setup    | Succeeded | --
     cert-setup       | Succeeded | --
  3. プライマリノードで次のコマンドを実行し、ピアノードの IP アドレスを指定します。
    CODE
    cd /home/appduser
    appdctl cluster init <Node-2-IP> <Node-3-IP>
  4. ノードステータスを確認するには、次のコマンドを実行します。
    CODE
    appdctl show cluster
    microk8s status

    出力に、クラスタの一部であるノードの Running ステータスが true として表示されることを確認します。

    出力例

    CODE
    NODE           | ROLE  | RUNNING 
    ----------------+-------+---------
     10.0.0.1:19001 | voter | true    
     10.0.0.2:19001 | voter | true    
     10.0.0.3:19001 | voter | true
    注:
    • クラスター内で少なくとも 2 つのノードがアクティブであることを確認します。いずれか 2 つのノードが使用できなくなると、データが失われるリスクがあります。
    • 次のエラーが表示された場合は、端末に再ログインする必要があります。
      CODE
      Insufficient Permissions to Access Microk8

DNS エントリの構成

Splunk AppDynamics コンポーネントの DNS 解決を確認します。次のスクリプトは、仮想アプライアンスでの通信の問題を引き起こす可能性のある一般的なネットワーク構成の問題を特定するのに役立ちます。特定のホスト名を IP アドレスに解決できるかどうかを確認します。これは、コントローラとそのサービスが適切に機能するために重要です。

globals.yaml.gotmpl に仮想アプライアンスのプライマリノードの IP アドレスが含まれていることを確認します。次のようにして globals.yaml.gotmpl ファイルを編集します。
  1. プライマリノードのコンソールにログインします。

  2. 次のフォルダに移動します。
    CODE
    cd /var/appd/config
  3. globals.yaml.gotmpl ファイルを編集し、dnsNamesdnsDomain を更新します。
    CODE
    vi globals.yaml.gotmpl

    仮想アプライアンスに設定する必要がある入力ドメイン名を一覧表示します。

    注:
    • クラスターにアクセスするには、appdcli のローカルホストを含める必要があります。ドメイン名が使用できない場合は、各クラスタに <nodeip>.nip.io を指定します。他の指定値に加えて、dnsDomain も値として含める必要があります。
    • 一部のネットワークポリシーでは、x.x.x.x.nip.io を含む IP アドレスがブロックされる場合があります。このようなシナリオでは、/etc/hosts ファイルを更新します。エアギャップ環境での DNS 設定の更新 を参照してください。
    • 仮想アプライアンスのドメイン名を使用している場合は、range split 関数をコメントにするか削除します。また、localhost をコメントにします。
    JSON
    dnsNames: &dnsNames
    # - localhost
      - 10.0.0.1.nip.io
      - 10.0.0.2.nip.io
      - 10.0.0.3.nip.io
      - appd.example.com
    # If you are using Virtual IP address for your standalone Controller, comment or delete the range split function.
    {{ range split " " $internalIPs }} {{ printf " - %s.%s" . "nip.io" }}
    {{ end }}
  1. プライマリ仮想アプライアンスノードのコンソールで、次のスクリプトを dnsinfo.sh として /var/appd/config に保存し、実行します。
    注: このスクリプトを初めて実行する場合は、プレーンな YAML のコードをコピーします。サービスのインストール後にこのスクリプトを実行する場合は、暗号化された YAML のコードをコピーします。
    プレーン YAML
    CODE
    #!/bin/bash
    set -euo pipefail
    
    # Assuming /var/appd/config/secrets.yaml is now a plain, unencrypted YAML file.
    # The '.encrypted' extension and 'helm secrets decrypt' command are removed.
    TENANT=$(yq .hybrid.controller.tenantAccountName /var/appd/config/secrets.yaml)
    CONTROLLER_DNS_DOMAIN=$(grep -v "^ *\t* *{{" /var/appd/config/globals.yaml.gotmpl | yq -r '.hybrid.controller.domainName')
    DNS_DOMAIN=$(grep -v "^ *\t* *{{" /var/appd/config/globals.yaml.gotmpl | yq -r '.dnsDomain')
    echo Verify the Virtual Appliance tenant should be \'${TENANT}\'
    echo Verify the Virtual Appliance domain name should be \'${DNS_DOMAIN}\'
    echo Verify the Controller domain name should be \'${CONTROLLER_DNS_DOMAIN}\'
     
    echo
    for server_name in "$CONTROLLER_DNS_DOMAIN" "${DNS_DOMAIN}" "${TENANT}.${CONTROLLER_DNS_DOMAIN}" "${TENANT}-tnt-con.${DNS_DOMAIN}" "${TENANT}-tnt-con.${CONTROLLER_DNS_DOMAIN}"; do
      if ! getent hosts "${server_name}" > /dev/null; then
        echo "Please add DNS entry for ${server_name} for controller host IP, VA is not able to resolve it currently"
      fi
    done
    for server_name in "${TENANT}.auth.${DNS_DOMAIN}" "${TENANT}-tnt-authn.${DNS_DOMAIN}"; do
      if ! getent hosts "${server_name}" > /dev/null; then
        echo "Please double-check on standalone controller that DNS can resolve entry for ${server_name} as VA ingress IP"
      fi
    done
    暗号化された YAML
    CODE
    #!/bin/bash
    set -euo pipefail
    TENANT=$(helm secrets decrypt /var/appd/config/secrets.yaml.encrypted  | yq .hybrid.controller.tenantAccountName)
    CONTROLLER_DNS_DOMAIN=$(grep -v "^ *\t* *{{" /var/appd/config/globals.yaml.gotmpl | yq -r '.hybrid.controller.domainName')
    DNS_DOMAIN=$(grep -v "^ *\t* *{{" /var/appd/config/globals.yaml.gotmpl | yq -r '.dnsDomain')
    echo Verify the Virtual Appliance tenant should be \'${TENANT}\'
    echo Verify the Virtual Appliance domain name should be \'${DNS_DOMAIN}\'
    echo Verify the Controller domain name should be \'${CONTROLLER_DNS_DOMAIN}\'
     
    echo
    for server_name in "$CONTROLLER_DNS_DOMAIN" "${DNS_DOMAIN}" "${TENANT}.${CONTROLLER_DNS_DOMAIN}" "${TENANT}-tnt-con.${DNS_DOMAIN}" "${TENANT}-tnt-con.${CONTROLLER_DNS_DOMAIN}"; do
      if ! getent hosts "${server_name}" > /dev/null; then
        echo "Please add DNS entry for ${server_name} for controller host IP, VA is not able to resolve it currently"
      fi
    done
    for server_name in "${TENANT}.auth.${DNS_DOMAIN}" "${TENANT}-tnt-authn.${DNS_DOMAIN}"; do
      if ! getent hosts "${server_name}" > /dev/null; then
        echo "Please double-check on standalone controller that DNS can resolve entry for ${server_name} as VA ingress IP"
      fi
    done
  2. dnsinfo.shの実行
    CODE
    bash ./dnsinfo.sh
    出力例:
    CODE
    Verify the Virtual Appliance tenant should be 'customer1'
    Verify the Virtual Appliance domain name should be 'va.mycompany.com'
    Verify the Controller domain name should be 'controller.mycompany.com'
    
    Please add DNS entry for controller.mycompany.com for controller host IP, VA is not able to resolve it currently
    Please add DNS entry for va.mycompany.com for controller host IP, VA is not able to resolve it currently
    Please add DNS entry for customer1.controller.mycompany.com for controller host IP, VA is not able to resolve it currently
    Please add DNS entry for customer1-tnt-con.va.mycompany.com for controller host IP, VA is not able to resolve it currently
    Please add DNS entry for customer1-tnt-con.controller.mycompany.com for controller host IP, VA is not able to resolve it currently
    Please double-check on standalone controller that DNS can resolve entry for customer1.auth.va.mycompany.com as VA ingress IP
    Please double-check on standalone controller that DNS can resolve entry for customer1-tnt-authn.va.mycompany.com as VA ingress IP

セルフモニタリング機能の有効化

仮想アプライアンスのセルフモニタリング機能を有効にできます。これを行うには、global.yaml.gotmpl ファイルで enableClusterAgent パラメータを true に編集します。

デフォルトでは、このパラメータは true に設定されています。この設定は、クラスターノードの CPU、メモリ、およびネットワークの使用状況をモニターするのに役立ちます。「コンテナの詳細の表示」を参照してください。

セルフモニタリング機能を無効化するには、このパラメータを false に設定します。
CODE
enableClusterAgent: false
注: セルフモニタリング機能を有効または無効にした後、変更内容を反映するには、仮想アプライアンスサービスを再起動する必要があります。

(任意)入力証明書の設定

デフォルトでは、入力コントローラには完全に設定された自己署名証明書がインストールされます。入力コントローラが提供する自己署名証明書が要件を満たしている場合は、この手順をスキップできます。

入力コントローラに CA 署名付き証明書が必要な場合は、必要なすべてのホスト名を指定して、Splunk AppDynamics 自己ホスト型仮想アプライアンス の SSL/TLS 証明書を構成します。これにより、仮想アプライアンスのすべてのコンポーネントとユーザーアクセスポイントに安全にアクセスできるようになります。次のスクリプトは、仮想アプライアンスでカスタム入力証明書に必要なサブジェクト代替名(SAN)のリストを生成します。これは、HTTPS を使用して仮想アプライアンスとの通信を保護するために重要です。

次のファイルがあることを確認します。
  • 秘密鍵: private.key
  • 署名済み公開鍵: cert.crt
  • CA ルートチェーン: ca.crt
注:
  • ingess.key がプライバシー強化メール(PEM)プレーンテキストのフォーマットであることを確認します。
  • ingress.crt のサーバー証明書の SAN には、global.yaml.gotmpl ファイルの dnsNames セクションで定義されているすべてのホスト名が含まれている必要があります。
  • Secure Application については、*.<DOMAIN-NAME> がリストに含まれており、証明書に SAN エイリアスが含まれていることを確認してください
CA 署名付き証明書を含める場合は、カスタム入力証明書を設定します。
  1. 入力キーを仮想アプライアンスにコピーします。
    CODE
    scp <ingress.pem> appduser@<node-IP-address>:/var/appd/config/ingress.key
  2. 仮想アプライアンスに入力証明書をコピーします。
    CODE
    scp <ingress.crt> appduser@<node-IP-address>:/var/appd/config/ingress.crt

スタンドアロンコントローラ TLS 証明書の更新

  1. すべての必要な SAN で新しいスタンドアロンコントローラ証明書を作成します。詳細は「コントローラ SSL と証明書」を参照してください。
    注: 仮想 IP アドレスを指定してロードバランサを使用する場合は、スタンドアロンコントローラではなくロードバランサから仮想アプライアンス(/var/appd/config)に SSL 証明書をコピーしてください。

    自己署名証明書の場合は、追加した DNS エントリを含む、新しく作成された証明書をインポートします。

    PYTHON
    keytool -import -trustcacerts -alias s1as \
    -file <certificate.crt> \
    -keystore <ControllerInstallation>/platform/product/controller/appserver/jetty/etc/keystore.jks
  2. 仮想アプライアンスのプライマリノードにログインし、ノードのコンソールの /var/appd/configcerts.sh として次のスクリプトを保存します。
    注: このスクリプトを初めて実行する場合は、プレーンな YAML のコードをコピーします。サービスのインストール後にこのスクリプトを実行する場合は、暗号化された YAML のコードをコピーします。
    プレーン YAML
    JSON
    #!/bin/bash
    set -euo pipefail
    TENANT=$(yq .hybrid.controller.tenantAccountName /var/appd/config/secrets.yaml)
    DNS_DOMAIN=$(grep -v "^ *\t* *{{" /var/appd/config/globals.yaml.gotmpl | yq -r '.dnsDomain')
    DNS_NAMES=$(grep -v "^ *\t* *{{" /var/appd/config/globals.yaml.gotmpl | yq -r '.dnsNames|join(" ")')
    
    echo Verify the Virtual Appliance tenant should be \'${TENANT}\'
    echo Verify the Virtual Appliance domain name should be \'${DNS_DOMAIN}\'
    echo Verify the Virtual Appliance node names are: ${DNS_NAMES}
    
    echo If creating and importing into VA a Custom Ingress Certificate, include the following SANs:
    for server_name in "$DNS_DOMAIN" "${TENANT}.${DNS_DOMAIN}" "*.${DNS_DOMAIN}" "${TENANT}.auth.${DNS_DOMAIN}" "${TENANT}-tnt-authn.${DNS_DOMAIN}" $DNS_NAMES; do
            echo "  ${server_name}"
    done
    暗号化された YAML
    JSON
    #!/bin/bash
    set -euo pipefail
    TENANT=$(helm secrets decrypt /var/appd/config/secrets.yaml.encrypted  | yq .hybrid.controller.tenantAccountName)
    DNS_DOMAIN=$(grep -v "^ *\t* *{{" /var/appd/config/globals.yaml.gotmpl | yq -r '.dnsDomain')
    DNS_NAMES=$(grep -v "^ *\t* *{{" /var/appd/config/globals.yaml.gotmpl | yq -r '.dnsNames|join(" ")')
    echo Verify the Virtual Appliance tenant should be \'${TENANT}\'
    echo Verify the Virtual Appliance domain name should be \'${DNS_DOMAIN}\'
    echo Verify the Virtual Appliance node names are: ${DNS_NAMES}
    
    echo If creating and importing into VA a Custom Ingress Certificate, include the following SANs:
    for server_name in "$DNS_DOMAIN" "${TENANT}.${DNS_DOMAIN}" "*.${DNS_DOMAIN}" "${TENANT}.auth.${DNS_DOMAIN}" "${TENANT}-tnt-authn.${DNS_DOMAIN}" $DNS_NAMES; do
            echo "  ${server_name}"
    done
  3. certs.sh を実行して欠落している SAN のリストを表示します。
    CODE
    bash ./certs.sh
    出力例には、カスタム入力証明書にない SAN が表示されています。
    CODE
    Verify the Virtual Appliance tenant should be 'customer1'
    Verify the Virtual Appliance domain name should be 'va.mycompany.com'
    Verify the Virtual Appliance node names are: localhost vanodename-1
    If creating and importing into VA a Custom Ingress Certificate, include the following SANs:
      va.mycompany.com
      customer1.va.mycompany.com
      *.va.mycompany.com
      customer1.auth.va.mycompany.com
      customer1-tnt-authn.va.mycompany.com
      localhost
      vanodename-1
    注: リスト内の localhost およびワイルドカードエントリは無視してかまいません。
  4. 必要なすべての SAN がコントローラに追加され、それらが仮想アプライアンスにインポートされるまで、この手順を繰り返します。
    注: コントローラを再起動するまで、変更は有効になりません。

仮想アプライアンスの証明書とキーの収集

仮想アプライアンスでは、セキュア通信を確立するために Splunk AppDynamics オンプレミス クラシックとそのデータベースからの証明書とキーが必要です。Kafka サービスに CA 署名付き証明書を使用する場合は、それらを仮想アプライアンスにコピーして、環境内で信頼できる接続とシームレスな運用を維持する必要があります。
スタンドアロンコントローラから仮想アプライアンスに SSL 証明書をコピーします。
  • コントローラ:証明書ファイルをエクスポートした場所に移動します。例:<AppD Home>/controller/appserver/jetty/etc/

    CODE
    scp hybrid-controller-ca.crt appduser@<node-IP-address>:/var/appd/config/hybrid-controller-ca.crt
    注: HTTPS 接続には hybrid-controller-ca.crt 証明書を使用します。
  • MySQL データベース:データベースの場所に移動します。たとえば、<AppD Home>/controller/db/data です。

    CODE
    scp ca.pem appduser@<node-IP-address>:/var/appd/config/hybrid-mysql-ca.crt
  • (任意)Kafka:Kafka の CA 証明書を生成する場合は、Kafka IP アドレスを指定します。これらの IP アドレスは、同じノード IP アドレスです。

    Kafka キーを仮想アプライアンスにコピーします。

    CODE
    scp <kafka.key> appduser@<node-IP-address>:/var/appd/config/hybrid-kafka.key

    Kafka 証明書を仮想アプライアンスにコピーします。

    CODE
    scp <kafka.crt> appduser@<node-IP-address>:/var/appd/config/hybrid-kafka.crt

次の手順を実行して、環境を準備します。

  1. appduser のログイン情報を使用して、プライマリノードのコンソールにログインします。ノードは、3 ノードクラスターを作成した後、プライマリノードと見なされます。
  2. 次のフォルダに移動します。
    CODE
    cd /var/appd/config
  3. 必要な設定で globals.yaml.gotmpl ファイルを編集します。詳細については、「globals.yaml.gotmpl」を参照してください。
    CODE
    vi globals.yaml.gotmpl

    仮想アプライアンスで、ネットワークアクセス、SSL 証明書を使用したセキュア通信、および設定済みデータベース接続が確立されていることを確認します。

    1. license.controllerKey にコントローラキーを入力します。
      注: コントローラキーを見つけるには、次の手順を実行します。
      1. Splunk AppDynamics オンプレミス クラシックコントローラ UI にログインします。
      2. Licenses > Account にアクセスします。
      3. [Access Key] で、[Show] をクリックしてコントローラキーをコピーします。

      仮想アプライアンスに適用する必要があるライセンスファイルを指定します。

      デフォルトでは、globals.yaml.gotmpl ファイルには controllerKeyeumKey のランダムな UUID があります。標準デプロイメントで controllerkey および eumkey の新しい汎用一意識別子を生成する場合は、Helm チャートフォルダ(/home/appduser/appd-charts/utils)から gen-uuid.sh スクリプトを実行します。

      生成された UUID を、サービスおよびエージェント認証用のライセンスセクションで指定します。

      JSON
      license:
      	file: |
      {{ if isFile "/var/appd/config/license.lic" }}
      {{ readFile "/var/appd/config/license.lic" | indent 4 }}
      {{ end }}
      	controllerKey: <Controller Key>
      	eumKey: <EUM Key>
    2. appdController.tenantAccountName セクションでアカウント名を確認します。「appdController」を参照してください。
    3. hybrid セクションで、enable パラメータを true に設定します。
      Kafka サービスに CA 署名付き証明書を使用している場合は、必要な詳細情報で hybrid.kafka セクションを更新します。

      デフォルトでは、このパラメータは false に設定されています。

      このパラメータを true に設定して、Kubernetes クラスターに逸脱検知と Secure Application サービスをインストールする際に、Splunk AppDynamics オンプレミスの現在のコントローラ、Events サービス、およびエンドユーザーモニタリング コンポーネントを活用します。

      true に設定すると、コントローラと MySQL の設定はコントローラの既存のデプロイメントを参照します。

      • コントローラのドメイン名を設定します。
        注:
        • ロードバランサまたは仮想 IP アドレスなしで仮想アプライアンスをセットアップした場合、高可用性フェールオーバー中に接続が自動的にアクティブノードに切り替わることはありません。

          したがって、 IP アドレスを更新し、フェールオーバー後に global.yaml.gotmpl ファイルの hybrid.controller.domainNamehybrid.mysql.dbhost を編集します。

        • ロードバランサ(仮想 IP アドレス)を使用して仮想アプライアンスをセットアップした場合は、global.yaml.gotmpl ファイルの hybrid.controller.domainNamehybrid.controller.porthybrid.mysql.dbhost セクションにロードバランサのドメイン名とポートを入力します。

          このドメイン名は、ロードバランサの仮想 IP アドレスに解決される必要があります。

      • スタンドアロンコントローラにアクセスするようにポートを設定します。
      • コントローラで TLS が有効になっている場合
        • [sslEnabled] フィールドを [true] に設定します。
        • スタンドアロンコントローラのコントローラ CA 証明書がない場合は、/var/appd/config/hybrid-controller-ca.crt にアップロードします。
      • MySQL ホストを設定します。これはコントローラのドメインと同じホストです。
      • スタンドアロン コントローラ データベースのポートを設定します。
      • オンプレミスの従来のデプロイメントからコピーした MySQL CA 証明書を入力します。
        注: hybrid.mysql.mysqlCaCertsFile パラメータのファイル名が正しいことを確認します。
      • (オプション)Kafka サービスの CA 証明書を入力します。
        注:

        hybrid.kafka.certFile パラメータのファイル名が正しいことを確認します。

        Kafka の CA 証明書を生成する場合は、Kafka IP アドレスを指定してください。これらの IP アドレスは、同じノード IP アドレスです。

        IP アドレスの例:

        CODE
        ipAddresses:
        - 10.0.0.1
        - 10.0.0.2
        - 10.0.0.3
      JSON
      hybrid:
      	enable: false
      	controller:
      		domainName: controller.nip.io
      		port: 8181
      		sslEnabled: true
      {{ if isFile "/var/appd/config/hybrid-controller-ca.crt" }}
      	controllerCaCertsFile: {{ readFile "/var/appd/config/hybrid-controller-ca.crt" | b64enc | quote }}
      {{ end }}
      mysql:
      	dbHost: controller.nip.io
      	dbPort: 3388
      {{ if isFile "/var/appd/config/hybrid-mysql-ca.crt" }}
      	mysqlCaCertsFile: {{ readFile "/var/appd/config/hybrid-mysql-ca.crt" | b64enc | quote }}
      {{ end }}
      kafka:
      defaultCert: true
      {{ if isFile "/var/appd/config/hybrid-kafka.key" }}
      	keyFile: {{ readFile "/var/appd/config/hybrid-kafka.key" | b64enc | quote }}
      {{ end }}
      {{ if isFile "/var/appd/config/hybrid-kafka.crt" }}
      	certFile: {{ readFile "/var/appd/config/hybrid-kafka.crt" | b64enc | quote }}
      {{ end }}
      schemaregistry:
      	externalUrl: https://<domain_name>/schemaregistry
  4. secrets.yaml ファイルを編集して仮想アプライアンスでシークレットを設定します。詳細については、「secrets.yaml」を参照してください
    1. コントローラと MySQL のログイン情報を更新します。

      Provide the Controller and MySQL credentials.

      YAML
      hybrid:
      	controller:
      		controllerKey: <Controller-Key-Value>
      		tenantAccountName: customer1
      		rootUsername: root
      		rootPassword: welcome
      		rootAccountname: system
      		adminUsername: admin
      		adminPassword: welcome
      	mysql:
      		dbUser: secapp
      		dbPassword: changeit
    2. (任意)Splunk AppDynamics サービスのユーザー名とパスワードを編集します。
  5. スタンドアロンコントローラが Kubernetes クラスタの Kafka ポートにアクセスできるように、ファイアウォールルールを更新します。各クラスタノードのファイアウォールルールを更新します。
    CODE
    sudo ufw allow AppdNodePorts