×

使用传输层安全 (TLS) 加密与 Red Hat OpenShift GitOps,您可以保护 Argo CD 组件和 Redis 缓存之间的通信,并保护传输过程中可能敏感的数据。

您可以使用以下配置之一来保护与 Redis 的通信

  • 启用autotls 设置以颁发适合 TLS 加密的证书。

  • 通过创建包含密钥和证书对的argocd-operator-redis-tls 密钥来手动配置 TLS 加密。

无论是否启用高可用性 (HA),这两种配置都是可能的。

先决条件

  • 您可以访问具有cluster-admin 权限的集群。

  • 您可以访问 OpenShift Container Platform Web 控制台。

  • Red Hat OpenShift GitOps Operator 已安装在您的集群上。

启用 autotls 为 Redis 配置 TLS

您可以通过在新 Argo CD 实例或现有 Argo CD 实例上启用autotls 设置来配置 Redis 的 TLS 加密。此配置会自动预配argocd-operator-redis-tls 密钥,无需其他步骤。目前,OpenShift Container Platform 是唯一支持的密钥提供程序。

默认情况下,autotls 设置处于禁用状态。

步骤
  1. 登录到 OpenShift Container Platform Web 控制台。

  2. 创建启用autotls 的 Argo CD 实例

    1. 在 Web 控制台的**管理员**视角中,使用左侧导航面板转到**管理** → **CustomResourceDefinitions**。

    2. 搜索argocds.argoproj.io 并单击ArgoCD 自定义资源定义 (CRD)。

    3. 在**CustomResourceDefinition 详情**页面上,单击**实例**选项卡,然后单击**创建 ArgoCD**。

    4. 编辑或替换类似于以下示例的 YAML

      启用 autotls 的示例 Argo CD CR
      apiVersion: argoproj.io/v1beta1
      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 实例的命名空间。
      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. 点击创建

    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 配置需要至少三个工作节点的集群。如果启用了具有 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

禁用 autotls 的情况下为 Redis 配置 TLS

您可以通过使用密钥和证书对创建 argocd-operator-redis-tls 密钥来手动配置 Redis 的 TLS 加密。此外,您必须注释密钥以指示它属于相应的 Argo CD 实例。对于启用了高可用性 (HA) 的实例,创建证书和密钥的步骤有所不同。

步骤
  1. 登录到 OpenShift Container Platform Web 控制台。

  2. 创建 Argo CD 实例

    1. 在 Web 控制台的**管理员**视角中,使用左侧导航面板转到**管理** → **CustomResourceDefinitions**。

    2. 搜索argocds.argoproj.io 并单击ArgoCD 自定义资源定义 (CRD)。

    3. 在**CustomResourceDefinition 详情**页面上,单击**实例**选项卡,然后单击**创建 ArgoCD**。

    4. 编辑或替换类似于以下示例的 YAML

      禁用 autotls 的示例 ArgoCD CR
      apiVersion: argoproj.io/v1beta1
      kind: ArgoCD
      metadata:
        name: argocd (1)
        namespace: openshift-gitops (2)
      spec:
        ha:
          enabled: true (3)
      1 Argo CD 实例的名称。
      2 您要运行 Argo CD 实例的命名空间。
      3 启用 HA 功能的标志值。如果您不想启用 HA,请不要包含此行或将标志值设置为false
    5. 点击创建

    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 配置需要至少三个工作节点的集群。如果启用了具有 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