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
设置。
流程
- 登陆到 OpenShift Container Platform Web 控制台。
创建启用了
autotls
的 Argo CD 实例:-
在 Web 控制台的 Administrator 视角中,使用左侧导航面板进入 Administration
CustomResourceDefinitions。 -
搜索
argocds.argoproj.io
并点ArgoCD
自定义资源定义 (CRD)。 - 在 CustomResourceDefinition 详情页面中,点 Instances 选项卡,然后点 Create ArgoCD。
编辑或替换类似以下示例的 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
提示另外,您可以通过运行以下命令来在已经存在的 Argo CD 实例上启用
autotls
设置:$ oc patch argocds.argoproj.io <instance-name> --type=merge -p '{"spec":{"redis":{"autotls":"openshift"}}}'
- 点 Create。
验证 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
-
在 Web 控制台的 Administrator 视角中,使用左侧导航面板进入 Administration
验证
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 的步骤会有所不同。
流程
- 登陆到 OpenShift Container Platform Web 控制台。
创建 Argo CD 实例:
-
在 Web 控制台的 Administrator 视角中,使用左侧导航面板进入 Administration
CustomResourceDefinitions。 -
搜索
argocds.argoproj.io
并点ArgoCD
自定义资源定义 (CRD)。 - 在 CustomResourceDefinition 详情页面中,点 Instances 选项卡,然后点 Create ArgoCD。
编辑或替换类似以下示例的 YAML:
禁用 autotls 的 ArgoCD CR 示例
apiVersion: argoproj.io/v1alpha1 kind: ArgoCD metadata: name: argocd 1 namespace: openshift-gitops 2 spec: ha: enabled: true 3
- 点 Create。
验证 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
-
在 Web 控制台的 Administrator 视角中,使用左侧导航面板进入 Administration
根据您的 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'
运行以下命令,验证生成的证书和密钥是否在
/tmp
目录中可用:$ cd /tmp
$ ls
禁用 HA 的输出示例
... redis.crt redis.key ...
启用了 HA 的输出示例
... redis-ha.crt redis-ha.key ...
根据您的 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
注解 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
验证 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