我们设置了 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
现在如文档所述正确配置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 文档中所述?
附加配置部分,可以在其中找到 ConfigMap argocd-cmd-params-cm
的可能标志。这些标志在argocd-cmd-params-cm.yaml 中进行了描述。其中之一是旗帜
server.insecure
## Server properties
# Run server without TLS
server.insecure: "false"
https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml附带的
argocd-server
部署将使用此参数(如果在 argocd-cmd-params-cm
ConfigMap 中定义了该参数)。 为了以声明方式配置 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
patches:
- path: argocd-cmd-params-cm-patch.yml
namespace: argocd
由于文档声明
建议将清单包含为远程资源并 使用 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"
3.使用 Kustomization 文件安装 ArgoCD & kubectl apply -k
有一个单独的 kustomize
CLI,可以安装,例如通过
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 仪表板:
apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
name: argocd-server
namespace: argocd
spec:
entryPoints:
- websecure
routes:
- kind: Rule
match: Host(`argocd.example.com`)
priority: 10
services:
- name: argocd-server
port: 80
- kind: Rule
match: Host(`argocd.example.com`) && Headers(`Content-Type`, `application/grpc`)
priority: 11
services:
- name: argocd-server
port: 80
scheme: h2c
tls: {}
使用 traefik 2.6.3 对我有用。
故障排除在
tls: {}
。