5.10. 配置与 Redis 的安全通信


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

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

  • 启用 autotls 设置,为 TLS 加密发布适当的证书。
  • 通过使用密钥和证书对创建 argocd-operator-redis-tls secret,手动配置 TLS 加密。

启用或没有启用高可用性 (HA) 时都可以使用这两个配置。

先决条件

  • 您可以使用 cluster-admin 权限访问集群。
  • 访问 OpenShift Container Platform web 控制台。
  • 在集群中安装了 Red Hat OpenShift GitOps Operator。

5.10.1. 为启用了 autotls 的 Redis 配置 TLS

您可以通过在新的或已有的 Argo CD 实例中启用 autotls 设置来为 Redis 配置 TLS 加密。配置会自动置备 argocd-operator-redis-tls secret,且不需要进一步的步骤。目前,OpenShift Container Platform 是唯一受支持的 secret 供应商。

注意

默认情况下禁用 autotls 设置。

流程

  1. 登陆到 OpenShift Container Platform Web 控制台。
  2. 创建启用了 autotls 的 Argo CD 实例:

    1. 在 Web 控制台的 Administrator 视角中,使用左侧导航面板进入 Administration CustomResourceDefinitions
    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 实例的命名空间。
      3
      启用 autotls 设置并为 Redis 创建 TLS 证书的标记。
      4
      启用 HA 功能的 flag 值。如果不启用 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 配置需要一个至少有三个 worker 节点的集群。如果您启用了使用 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 secret 是否已创建:

    $ 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

    secret 必须是 kubernetes.io/tls 类型,大小为 2

5.10.2. 为禁用了 autotls 的 Redis 配置 TLS

您可以使用密钥和证书对创建 argocd-operator-redis-tls secret,为 Redis 手动配置 TLS 加密。另外,您必须注解 secret 以指示它属于适当的 Argo CD 实例。对于启用了高可用性 (HA) 的实例,创建证书和 secret 的步骤会有所不同。

流程

  1. 登陆到 OpenShift Container Platform Web 控制台。
  2. 创建 Argo CD 实例:

    1. 在 Web 控制台的 Administrator 视角中,使用左侧导航面板进入 Administration CustomResourceDefinitions
    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 实例的命名空间。
      3
      启用 HA 功能的 flag 值。如果不启用 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 配置需要一个至少有三个 worker 节点的集群。如果您启用了使用 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 secret:

    • 对于禁用了 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. 注解 secret 以表示它属于 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

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.