4.9. Redis との安全な通信の設定

Red Hat OpenShift GitOps で Transport Layer Security (TLS) 暗号化を使用すると、Argo CD コンポーネントと Redis キャッシュ間の通信を保護し、転送中の可能性のある機密データを保護できます。

次の設定のいずれかを使用して、Redis との通信を保護できます。

  • autotls 設定を有効にして、TLS 暗号化に適切な証明書を発行します。
  • キーと証明書のペアを使用して argocd-operator-redis-tls シークレットを作成し、TLS 暗号化を手動で設定します。

どちらの設定も、高可用性 (HA) が有効になっているかどうかに関係なく可能です。

前提条件

  • cluster-admin 権限でクラスターにアクセスできる。
  • OpenShift Container Platform Web コンソールにアクセスできる。
  • Red Hat OpenShift GitOps Operator がクラスターにインストールされている。

4.9.1. autotls を有効にして Redis の TLS を設定する

新規または既存の Argo CD インスタンスで autotls 設定を有効にすることで、Redis の TLS 暗号化を設定できます。この設定では 、argocd-operator-redis-tls シークレットが自動的にプロビジョニングされるため、それ以上の手順は必要ありません。現時点で、OpenShift Container Platform は唯一サポートされているシークレットプロバイダーです。

注記

デフォルトでは、autotls 設定は無効になっています。

手順

  1. OpenShift Container Platform Web コンソールにログインします。
  2. autotls を有効にして Argo CD インスタンスを作成します。

    1. Web コンソールの Administrator パースペクティブで、左側のナビゲーションパネルを使用して、AdministrationCustomResourceDefinitions に移動します。
    2. argocds.argoproj.io を検索し、ArgoCD カスタムリソース定義 (CRD) をクリックします。
    3. CustomResourceDefinition の詳細 ページで、Instances タブをクリックし、Create ArgoCD をクリックします。
    4. 次の例のように YAML を編集または置換します。

      autotls を有効にした Argo CD CR の例

      apiVersion: argoproj.io/v1alpha1
      kind: ArgoCD
      metadata:
        name: argocd 1
        namespace: openshift-gitops 2
      spec:
        redis:
          autotls: openshift 3
        ha:
          enabled: true 4

      1
      Argo CD インスタンスの名前。
      2
      Argo CD インスタンスを実行する namespace。
      3
      autotls 設定を有効にし、Redis の TLS 証明書を作成するフラグ。
      4
      HA 機能を有効にするフラグの値。HA を有効にしたくない場合は、この行を含めないか、フラグ値を false に設定します。
      ヒント

      あるいは、次のコマンドを実行して、既存の Argo CD インスタンスで autotls に設定を有効にすることもできます。

      $ oc patch argocds.argoproj.io <instance-name> --type=merge -p '{"spec":{"redis":{"autotls":"openshift"}}}'
    5. Create をクリックします。
    6. Argo CD Pod が準備ができており、実行中であることを確認します。

      $ oc get pods -n <namespace> 1
      1
      Argo CD インスタンスが実行されている名前空間 (例: openshift-gitops) を指定します。

      HA を無効にした場合の出力例

      NAME                                  READY   STATUS    RESTARTS   AGE
      argocd-application-controller-0       1/1     Running   0          26s
      argocd-redis-84b77d4f58-vp6zm         1/1     Running   0          37s
      argocd-repo-server-5b959b57f4-znxjq   1/1     Running   0          37s
      argocd-server-6b8787d686-wv9zh        1/1     Running   0          37s

      注記

      HA 対応の TLS 設定には、少なくとも 3 つのワーカーノードを備えたクラスターが必要です。HA 設定で Argo CD インスタンスを有効にしている場合、出力が表示されるまでに数分かかることがあります。

      HA を有効にした場合の出力例

      NAME                                       READY   STATUS    RESTARTS   AGE
      argocd-application-controller-0            1/1     Running   0          10m
      argocd-redis-ha-haproxy-669757fdb7-5xg8h   1/1     Running   0          10m
      argocd-redis-ha-server-0                   2/2     Running   0          9m9s
      argocd-redis-ha-server-1                   2/2     Running   0          98s
      argocd-redis-ha-server-2                   2/2     Running   0          53s
      argocd-repo-server-576499d46d-8hgbh        1/1     Running   0          10m
      argocd-server-9486f88b7-dk2ks              1/1     Running   0          10m

  3. argocd-operator-redis-tls シークレットが作成されていることを確認します。

    $ oc get secrets argocd-operator-redis-tls -n <namespace> 1
    1
    Argo CD インスタンスが実行されている名前空間 (例: openshift-gitops) を指定します。

    出力例

    NAME                        TYPE                DATA   AGE
    argocd-operator-redis-tls   kubernetes.io/tls   2      30s

    シークレットは kubernetes.io/tls タイプで、サイズが 2 である必要があります。

4.9.2. autotls を無効にして Redis の TLS を設定する

キーと値のペアを使用して argocd-operator-redis-tls シークレットを作成して、Redis の TLS 暗号化を手動で設定できます。さらに、シークレットにアノテーションを付けて、それが適切な Argo CD インスタンスに属していることを示す必要があります。証明書とシークレットを作成する手順は、高可用性 (HA) が有効になっているインスタンスによって異なります。

手順

  1. OpenShift Container Platform Web コンソールにログインします。
  2. Argo CD インスタンスを作成します。

    1. Web コンソールの Administrator パースペクティブで、左側のナビゲーションパネルを使用して、AdministrationCustomResourceDefinitions に移動します。
    2. argocds.argoproj.io を検索し、ArgoCD カスタムリソース定義 (CRD) をクリックします。
    3. CustomResourceDefinition の詳細 ページで、Instances タブをクリックし、Create ArgoCD をクリックします。
    4. 次の例のように YAML を編集または置換します。

      autotls を無効にした ArgoCD CR の例

      apiVersion: argoproj.io/v1alpha1
      kind: ArgoCD
      metadata:
        name: argocd 1
        namespace: openshift-gitops 2
      spec:
        ha:
          enabled: true 3

      1
      Argo CD インスタンスの名前。
      2
      Argo CD インスタンスを実行する namespace。
      3
      HA 機能を有効にするフラグの値。HA を有効にしたくない場合は、この行を含めないか、フラグ値を false に設定します。
    5. Create をクリックします。
    6. Argo CD Pod が準備ができており、実行中であることを確認します。

      $ oc get pods -n <namespace> 1
      1
      Argo CD インスタンスが実行されている名前空間 (例: openshift-gitops) を指定します。

      HA を無効にした場合の出力例

      NAME                                  READY   STATUS    RESTARTS   AGE
      argocd-application-controller-0       1/1     Running   0          26s
      argocd-redis-84b77d4f58-vp6zm         1/1     Running   0          37s
      argocd-repo-server-5b959b57f4-znxjq   1/1     Running   0          37s
      argocd-server-6b8787d686-wv9zh        1/1     Running   0          37s

      注記

      HA 対応の TLS 設定には、少なくとも 3 つのワーカーノードを備えたクラスターが必要です。HA 設定で Argo CD インスタンスを有効にしている場合、出力が表示されるまでに数分かかることがあります。

      HA を有効にした場合の出力例

      NAME                                       READY   STATUS    RESTARTS   AGE
      argocd-application-controller-0            1/1     Running   0          10m
      argocd-redis-ha-haproxy-669757fdb7-5xg8h   1/1     Running   0          10m
      argocd-redis-ha-server-0                   2/2     Running   0          9m9s
      argocd-redis-ha-server-1                   2/2     Running   0          98s
      argocd-redis-ha-server-2                   2/2     Running   0          53s
      argocd-repo-server-576499d46d-8hgbh        1/1     Running   0          10m
      argocd-server-9486f88b7-dk2ks              1/1     Running   0          10m

  3. HA 設定に応じて、次のいずれかのオプションを使用して、Redis サーバーの自己署名証明書を作成します。

    • HA が無効になっている Argo CD インスタンスの場合は、次のコマンドを実行します。

      $ openssl req -new -x509 -sha256 \
        -subj "/C=XX/ST=XX/O=Testing/CN=redis" \
        -reqexts SAN -extensions SAN \
        -config <(printf "\n[SAN]\nsubjectAltName=DNS:argocd-redis.<namespace>.svc.cluster.local\n[req]\ndistinguished_name=req") \ 1
        -keyout /tmp/redis.key \
        -out /tmp/redis.crt \
        -newkey rsa:4096 \
        -nodes \
        -sha256 \
        -days 10
      1
      Argo CD インスタンスが実行されている名前空間 (例: openshift-gitops) を指定します。

      出力例

      Generating a RSA private key
      ...............++++
      ............................++++
      writing new private key to '/tmp/redis.key'

    • HA が有効になっている Argo CD インスタンスの場合は、以下のコマンドを実行します。

      $ openssl req -new -x509 -sha256 \
        -subj "/C=XX/ST=XX/O=Testing/CN=redis" \
        -reqexts SAN -extensions SAN \
        -config <(printf "\n[SAN]\nsubjectAltName=DNS:argocd-redis-ha-haproxy.<namespace>.svc.cluster.local\n[req]\ndistinguished_name=req") \ 1
        -keyout /tmp/redis-ha.key \
        -out /tmp/redis-ha.crt \
        -newkey rsa:4096 \
        -nodes \
        -sha256 \
        -days 10
      1
      Argo CD インスタンスが実行されている名前空間 (例: openshift-gitops) を指定します。

      出力例

      Generating a RSA private key
      ...............++++
      ............................++++
      writing new private key to '/tmp/redis-ha.key'

  4. 次のコマンドを実行して、生成された証明書とキーが /tmp ディレクトリーで利用できることを確認します。

    $ cd /tmp
    $ ls

    HA を無効にした場合の出力例

    ...
    redis.crt
    redis.key
    ...

    HA を有効にした場合の出力例

    ...
    redis-ha.crt
    redis-ha.key
    ...

  5. HA 設定に応じて、次のいずれかのオプションを使用して、argocd-operator-redis-tls シークレットを作成します。

    • HA が無効になっている Argo CD インスタンスの場合は、次のコマンドを実行します。

      $ oc create secret tls argocd-operator-redis-tls --key=/tmp/redis.key --cert=/tmp/redis.crt
    • HA が有効になっている Argo CD インスタンスの場合は、以下のコマンドを実行します。

      $ oc create secret tls argocd-operator-redis-tls --key=/tmp/redis-ha.key --cert=/tmp/redis-ha.crt

      出力例

      secret/argocd-operator-redis-tls created

  6. シークレットにアノテーションを付けて、それが Argo CD CR に属していることを示します。

    $ oc annotate secret argocd-operator-redis-tls argocds.argoproj.io/name=<instance-name> 1
    1
    Argo CD インスタンスの名前を指定します (例: argocd)。

    出力例

    secret/argocd-operator-redis-tls annotated

  7. Argo CD Pod が準備ができており、実行中であることを確認します。

    $ oc get pods -n <namespace> 1
    1
    Argo CD インスタンスが実行されている名前空間 (例: openshift-gitops) を指定します。

    HA を無効にした場合の出力例

    NAME                                  READY   STATUS    RESTARTS   AGE
    argocd-application-controller-0       1/1     Running   0          26s
    argocd-redis-84b77d4f58-vp6zm         1/1     Running   0          37s
    argocd-repo-server-5b959b57f4-znxjq   1/1     Running   0          37s
    argocd-server-6b8787d686-wv9zh        1/1     Running   0          37s

    注記

    HA 設定で Argo CD インスタンスを有効にしている場合、出力が表示されるまでに数分かかることがあります。

    HA を有効にした場合の出力例

    NAME                                       READY   STATUS    RESTARTS   AGE
    argocd-application-controller-0            1/1     Running   0          10m
    argocd-redis-ha-haproxy-669757fdb7-5xg8h   1/1     Running   0          10m
    argocd-redis-ha-server-0                   2/2     Running   0          9m9s
    argocd-redis-ha-server-1                   2/2     Running   0          98s
    argocd-redis-ha-server-2                   2/2     Running   0          53s
    argocd-repo-server-576499d46d-8hgbh        1/1     Running   0          10m
    argocd-server-9486f88b7-dk2ks              1/1     Running   0          10m