ArgoCD & Traefik 2.x:如何配置 argocd-server 部署以在禁用 TLS 的情况下运行(在哪里放置 --insecure 标志)

jon*_*ckt 6 kubernetes traefik kubernetes-ingress kustomize argocd

我们设置了 Traefik 作为入口控制器/CRD 和 ArgoCD。我们将 ArgoCD 安装到EKS 设置中,如Argo 入门指南中所述:

kubectl create namespace argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
Run Code Online (Sandbox Code Playgroud)

现在,正如文档所述,正确配置 Traefik 的对象IngressRoute如下所示:

apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
  name: argocd-server
  namespace: argocd
spec:
  entryPoints:
    - websecure
  routes:
    - kind: Rule
      match: Host(`argocd.tekton-argocd.de`)
      priority: 10
      services:
        - name: argocd-server
          port: 80
    - kind: Rule
      match: Host(`argocd.tekton-argocd.de`) && Headers(`Content-Type`, `application/grpc`)
      priority: 11
      services:
        - name: argocd-server
          port: 80
          scheme: h2c
  tls:
    certResolver: default
    
Run Code Online (Sandbox Code Playgroud)

现在文档中有一个错误- 因此请务必删除options: {}以便让 Traefik 接受配置。

Traefik 在仪表板中显示一切正常:

在此输入图像描述

但是,如果我们尝试访问https://argocd.tekton-argocd.de上的 ArgoCD 仪表板,我们会收到多个HTTP 307重定向,最终无法访问仪表板。您可以在开发者工具中看到重定向:

在此输入图像描述

在寻找解决方案时,我们已经发现了这个问题,其中描述了问题:

问题是默认情况下 Argo-CD 自行处理 TLS 终止并始终将 HTTP 请求重定向到 HTTPS。将其与还处理 TLS 终止并始终通过 HTTP 与后端服务通信的入口控制器相结合,您将获得 Argo-CD 的服务器始终以重定向到 HTTPS 进行响应。

解决方案也被勾勒出来:

因此,解决方案之一是在 Argo-CD 上禁用 HTTPS,您可以通过在 argocd-server 上使用 --insecure 标志来做到这一点。

但是我们如何配置argocd-server部署以将标志添加--insecure到 argocd-server 命令中 - 正如ArgoCD 文档中所述

jon*_*ckt 15

0. 为什么使用 Kustomize 进行声明性 ArgoCD 设置是配置自定义参数的好方法

关于如何配置 ArgoCD 有多种选项。一个很好的方法是使用声明式方法,这应该是默认的 Kubernetes 风格。浏览 ArgoCD 文档有一个额外的配置部分argocd-cmd-params-cm,可以在其中找到ConfigMap 的可能标志。这些标志在argocd-cmd-params-cm.yaml中进行了描述。其中之一就是国旗server.insecure

## Server properties
# Run server without TLS
server.insecure: "false"
Run Code Online (Sandbox Code Playgroud)

如果在 ConfigMap 中定义了此参数,则https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yamlargocd-server附带的部署将使用此参数。argocd-cmd-params-cm

为了以声明方式配置 ArgoCD 配置,ArgoCD 文档有一个很好的部分介绍如何使用Kustomize进行此操作。事实上,ArgoCD 团队本身就使用这种方法来部署他们自己的 ArgoCD 实例 - 可以在此处https://cd.apps.argoproj.io/进行实时部署,并且可以在 GitHub 上找到所使用的配置。

将此应用到我们的用例中,我们需要将 ArgoCD 安装从简单使用切换kubectl apply -f为基于 Kustomize 的安装。ArgoCD 文档也有一个关于如何执行此操作的部分。以下是简要步骤:

1.创建一个argocd/installation目录并新建一个文件kustomization.yaml

我们稍微增强了kustomization.yaml文档中的建议:

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization

resources:
  - https://raw.githubusercontent.com/argoproj/argo-cd/v2.3.3/manifests/install.yaml

## changes to config maps
patchesStrategicMerge:
  - argocd-cmd-params-cm-patch.yml

namespace: argocd
Run Code Online (Sandbox Code Playgroud)

由于文档声明

建议将清单包含为远程资源,并使用 Kustomize 补丁应用其他自定义。

我们使用patchesStrategicMerge配置密钥,其中包含我们需要创建的另一个新文件,称为argocd-cmd-params-cm-patch.yml.

2. 创建一个新文件argocd-cmd-params-cm-patch.yml

这个新文件仅包含我们要在 ConfigMap 中更改的配置argocd-cmd-params-cm

apiVersion: v1
kind: ConfigMap
metadata:
  name: argocd-cmd-params-cm
data:
  server.insecure: "true"
Run Code Online (Sandbox Code Playgroud)

3. 使用 Kustomization 文件安装 ArgoCD &kubectl apply -k

有一个单独的kustomizeCLI 可以安装,例如通过brew install kustomize. 但由于 Kustomize 已内置,kubectl我们只需使用kubectl apply -k它并将其指向我们新创建的argocd/installation目录,如下所示。我们还需要确保argocd名称空间已创建:

kubectl create namespace argocd --dry-run=client -o yaml | kubectl apply -f -    
kubectl apply -k argocd/installation
Run Code Online (Sandbox Code Playgroud)

这将安装 ArgoCD 并配置argocd-server部署以根据需要使用该--insecure标志来阻止 Argo 自行处理 TLS 终止并将该责任交给 Traefik。现在访问https://argocd.tekton-argocd.de应按预期打开 ArgoCD 仪表板:

在此输入图像描述