Backstage の ArgoCD プラグイン

Red Hat Developer Hub 0.2

Backstage の ArgoCD プラグイン

Red Hat Customer Content Services

概要

ArgoCD プラグインは、アプリケーションの現在のステータスを表します。

第1章 Backstage の ArgoCD プラグイン

ArgoCD プラグインは、Backstage Catalog のアプリケーションの現在のステータスを表します。

1.1. 管理者の場合

1.1.1. インストール

Red Hat Plug-ins for Backstage (RHPIB) プラグインは、Red Hat が管理する別の NPM レジストリーでホストされます。これらのパッケージを使用するには、NPM 設定を調整して @redhat スコープパッケージをプルする必要があります。

# update your .npmrc or .yarnrc file
yarn config set "@redhat:registry" https://npm.registry.redhat.com
# then pull a package
yarn add @redhat/backstage-plugin-quay

詳細は、npm ドキュメント を参照してください。

.npmrc ファイルを作成すると、すべてのパッケージのスコープが @redhat にあり、Red Hat の NPM レジストリー から取得され、残りの依存関係は他の レジストリー から引き続き取得されます。

前提条件

  • Backstage アプリケーションがインストールされ、デプロイされている。

手順

  1. backstage/packages/app プロジェクトで、以下のように ArgoCD プラグインを package.json 依存関係として追加します。

    cd packages/app
    yarn add @redhat/backstage-plugin-argo-cd
  2. root ディレクトリーで利用できる app-config.yaml ファイルで、以下のように argo-cd をプロキシーオブジェクトに追加します。

    proxy:
      ...
    
      '/argocd/api':
        # url to the api of your hosted argoCD instance
        target: https://159.65.209.132/api/v1/
        changeOrigin: true
        # this line is required if your hosted argoCD instance has self-signed certificate
        secure: false
        headers:
          Cookie:
            $env: ARGOCD_AUTH_TOKEN
    
    
    # optional: this will link to your argoCD web UI for each argoCD application
    argocd:
      baseUrl: https://my-argocd-web-ui.com

    また、必要に応じて、前のコードに ArgoCD Web UI のベース URL を追加できます。

  3. 以下のコードを使用して、ArgoCD プラグインをプラグインの一覧に追加します。

    // packages/app/src/plugins.ts
    export { argocdPlugin } from '@redhat/backstage-plugin-argo-cd';
  4. 以下のように、ArgoCD プラグインを entitityPage.tsx ファイルに追加します。

    // packages/app/src/components/catalog/EntityPage.tsx
    import {
      EntityArgoCDHistoryCard,
      isArgocdAvailable,
    } from '@redhat/backstage-plugin-argo-cd';
    
    
    const overviewContent = (
      <Grid container spacing={3} alignItems="stretch">
        ...
        <EntitySwitch>
          <EntitySwitch.Case if={e => Boolean(isArgocdAvailable(e))}>
            <Grid item sm={6}>
              <EntityArgoCDHistoryCard />
            </Grid>
          </EntitySwitch.Case>
        </EntitySwitch>
        ...
      </Grid>
    );
  5. Backstage のコンポーネントに ArgoCD プラグインを使用するには、コンポーネントの YAML config ファイルにアノテーションを追加します。

    argocd/app-name: <app-name>

    コンポーネントに複数の ArgoCD アプリケーションを選択するには、以下のようにラベルを使用します。

    argocd/app-selector: <app-selector>

    注記

    コンポーネントにはアノテーションまたはラベルを使用できます。

  6. ユーザー名とパスワードを使用して GET HTTP リクエストを ArgoCD の /session エンドポイントに送信し、認証キーを取得します。
  7. 以下のように、Backstage バックエンドサーバーの環境変数に取得した認証キーを追加します。

    ARGOCD_AUTH_TOKEN="argocd.token=<auth-token>"

1.2. Backstage での複数の ArgoCD インスタンスのサポート

Backstage で複数の ArgoCD インスタンスをサポートするには、以下を含む 2 つのオプションがあります。

  • 各 ArgoCD インスタンスのプロキシー設定の追加
  • ArgoCD バックエンドプラグインの使用

オプション 1: 各 ArgoCD インスタンスのプロキシー設定の追加

  1. 異なる ArgoCD インスタンスからデータを取得する複数のコンポーネントを作成するには、以下の例に示すように、インスタンスごとにプロキシー設定を追加します。

    proxy:
      ...
    
      '/argocd/api':
        target: https://<someAddress>/api/v1/
        changeOrigin: true
        secure: false
        headers:
          Cookie:
            $env: ARGOCD_AUTH_TOKEN
    
      '/argocd/api2':
        target: https://<otherAddress>/api/v1/
        changeOrigin: true
        secure: false
        headers:
          Cookie:
            $env: ARGOCD_AUTH_TOKEN2
  2. ARGOCD_AUTH_TOKEN2 などの環境変数に必要な認証トークンを追加します。

    認証トークンを追加したら、以下に示すコンポーネント定義のアノテーション内にある目的のプロキシーパスに URL を追加します。

    argocd/proxy-url: '/argocd/api2'

    argocd/proxy-url アノテーションのデフォルトは '/argocd/api' です。そのため、単一のプロキシー設定が存在する場合は、argocd/proxy-url が必要ありません。

オプション 2: ArgoCD バックエンドプラグインの使用

  1. 異なる ArgoCD インスタンスからデータを取得する複数のコンポーネントを作成するには、以下の設定を app-config.yaml ファイルに追加して ArgoCD インスタンス URL を動的に設定します。

    argocd:
      username: ${ARGOCD_USERNAME}
      password: ${ARGOCD_PASSWORD}
      waitCycles: 25
      appLocatorMethods:
        - type: 'config'
          instances:
            - name: argoInstance1
              url: https://argoInstance1.com
              token: ${ARGOCD_AUTH_TOKEN} # optional
            - name: argoInstance2
              url: https://argoInstance2.com
              # dedicated username/password for this instance
              username: ${ARGOCD_USERNAME_INSTANCE_2} # optional
              password: ${ARGOCD_PASSWORD_INSTANCE_2} # optional

    削除する ArgoCD プロジェクトとアプリケーションの間にループが作成され、プロジェクトを削除する前に、アプリケーションが削除されていることを確認します。waitCycles が 25 に設定されていると、ループはエラーが発生するまで 75 秒間継続できます。

    以前の設定では、ArgoCD プラグインは、アプリケーションがデプロイされている ArgoCD インスタンスを取得し、ArgoCD バックエンドプラグイン (backstage-plugin-argo-cd-backend) を使用して、以下のマッピングに基づいて各 ArgoCD インスタンスに到達します。

    • argocd オブジェクト内の ARGOCD_USERNAMEARGOCD_PASSWORD などの環境変数に必要な認証トークンを追加します。これらの認証トークンは、デフォルトですべての ArgoCD インスタンスの認証情報として使用されます。

      argocd:
        username: ${ARGOCD_USERNAME}
        password: ${ARGOCD_PASSWORD}
        appLocatorMethods:
          - type: 'config'
            instances:
              - name: argoInstance1
                url: https://argoInstance1.com
              - name: argoInstance2
                url: https://argoInstance2.com
    • 各 ArgoCD インスタンスのユーザー名とパスワードを定義します。このマッピングは、前のオプションよりも優先されます。

      argocd:
        username: ${ARGOCD_USERNAME}
        password: ${ARGOCD_PASSWORD}
        appLocatorMethods:
          - type: 'config'
            instances:
              - name: argoInstance1
                url: https://argoInstance1.com
              - name: argoInstance2
                url: https://argoInstance2.com
                # dedicated username/password for this instance
                username: ${ARGOCD_USERNAME_INSTANCE_2}
                password: ${ARGOCD_PASSWORD_INSTANCE_2}
    • 各インスタンスのトークンを定義します。このマッピングは、前述の両方のオプションよりも優先されます。

      argocd:
        username: ${ARGOCD_USERNAME}
        password: ${ARGOCD_PASSWORD}
        appLocatorMethods:
          - type: 'config'
            instances:
              - name: argoInstance1
                url: https://argoInstance1.com
                token: ${ARGOCD_AUTH_TOKEN} # Token to use to instance 1

1.2.1. ArgoCD プラグインのパーミッション

ArgoCD ユーザーアカウントのパーミッションを設定すると、スコープが縮小されるだけでなく、バックエンドの機能も低下します。読み取り専用のパーミッションのスコープを指定すると、アプリケーションの作成、削除、再同期を含むアクションは利用できません。

ArgoCD でのエラー処理は、適切なパーミッションが設定されていない場合に警告するように設計されています。

1.2.2. ArgoCD プラグインの自己署名証明書

デフォルトでは、ArgoCD サーバーは自己署名証明書を生成します。ArgoCD プラグインをインストールすると、以下のコマンドを使用して、argocd-server のデプロイメントにパッチを適用し、安全でない状態にすることができます。

kubectl patch deployment argocd-server --type "json" -p '[{"op":"add","path":"/spec/template/spec/containers/0/command/-","value":"--insecure"}]'

また、Helm を使用して ArgoCD プラグインをインストールすると、デフォルトでは安全ではなくなります。

helm upgrade --install argocd argo/argo-cd \
  --version 3.33.5 \
  --set 'server.extraArgs={--insecure}'

1.3. ユーザーの場合

1.3.1. Backstage での ArgoCD プラグインの使用

ArgoCD プラグインは、Backstage Catalog 内のアプリケーションの現在の状態を表示します。

前提条件

  • Backstage アプリケーションがインストールされ、実行されている。
  • ArgoCD プラグインがインストールされている。インストール手順は、「インストール」 を参照してください。

手順

  1. Backstage アプリケーションを開き、Catalog ページに移動します。
  2. OVERVIEW タブでは、下部に ArgoCD 概要カードが表示されます。

    ArgoCD 概要カード

    ArgoCD 概要カードには、NAMEINSTANCESYNC STATUSHEALTH STATUSLAST SYNCED などのアプリケーション情報が表示されます。

  3. 詳細なアプリケーション情報を表示するには、ArgoCD 概要カードからアプリケーションを選択します。

    アプリケーションに関する詳細情報を含むポップアップと、ArgoCD ダッシュボードへのリンクが表示されます。

    ArgoCD 概要カード
  4. ArgoCD 履歴を表示するには、Catalog の CD タブに移動します。

    ArgoCD 概要カード

    ArgoCD history ページには、アプリケーションインスタンスの履歴と、デプロイの詳細、作成者名、作成者が追加したメッセージ、リビジョン ID などの他の情報が含まれています。

法律上の通知

Copyright © 2023 Red Hat, Inc.
The text of and illustrations in this document are licensed by Red Hat under a Creative Commons Attribution–Share Alike 3.0 Unported license ("CC-BY-SA"). An explanation of CC-BY-SA is available at http://creativecommons.org/licenses/by-sa/3.0/. In accordance with CC-BY-SA, if you distribute this document or an adaptation of it, you must provide the URL for the original version.
Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law.
Red Hat, Red Hat Enterprise Linux, the Shadowman logo, the Red Hat logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation's permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.