回答问题

我们将 Traefik 设置为 Ingress Controller / 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

现在作为文档状态正确配置 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
    

现在在文档中有一个错误 - 所以一定要删除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 文档](https://argo-cd.readthedocs.io/en/stable/operator-manual/ingress/#traefik-v22)中说明的[?

Answers

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

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

## Server properties
# Run server without TLS
server.insecure: "false"

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

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

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

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

我们稍微增强了文档中提出的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

由于文档状态

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

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

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

这个新文件只包含我们想要在 ConfigMapargocd-cmd-params-cm中更改的配置:

apiVersion: v1
kind: ConfigMap
metadata:
  name: argocd-cmd-params-cm
data:
  server.insecure: "true"

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

可以安装一个单独的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

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

在此处输入图像描述

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐