首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >带argoCD -configuration问题的traefik问题,argoCD不可达

带argoCD -configuration问题的traefik问题,argoCD不可达
EN

Stack Overflow用户
提问于 2022-04-27 11:49:17
回答 1查看 537关注 0票数 0

Traefik & ArgoCD

设置

大家好!我在我的Ubuntu服务器上安装了一个简单的Kubernetes,并安装了Traefik。到目前一切尚好。TLS工作,我可以连接到我的仪表板和演示应用程序在我的领域。我的Traefik仪表板是通过创建并添加到IngressRoute中的一个简单的基本中间件来保护的。正如我所预期的,现在只有traefik.example.com下的仪表板是安全的,但是example.com下的演示应用程序不受影响。

问题

现在让我们来看看奇怪的部分:我安装了带有头盔的ArgoCD和一个向服务器添加--不安全标志的值图表。之后,我为argocd.example.com创建了一个没有任何中间件的argocd.example.com (!)试过了。令我惊讶的是,我看到的不是ArgoCD登录屏幕,而是我的中间件弹出。当我输入我的中间件凭证后,我被转发到argocd UI,但是没有工作。

屏幕截图

我的第一次尝试是使用与我的中间件相同的auth创建argoCD用户,希望这是一个解决办法。在那之后,我暂时删除了我的中间件和ArgoCD,就像一个魅力!我真的无法解释为什么会发生这种事。中间件一开始不应该在那里,但是即使它在那里,为什么服务在没有成功的身份验证的情况下工作,而不是在成功的身份验证之后。

你可以在下面找到我的资源。任何建议和解决办法,我都会很高兴!我只是想用中间件来保护我的traefik仪表板,但是使用argocd的标准登录页面。

我的资源:

IngressRoute

代码语言:javascript
运行
复制
apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
  annotations:
  name: argocd-server
spec:
  entryPoints:
  - websecure
  routes:
  - kind: Rule
    match: Host(`argocd.example.de`)
    priority: 10
    services:
    - name: argo-cd-argocd-server
      port: 80
  - kind: Rule
    match: Host(`argocd.example.de`) && Headers(`Content-Type`, `application/grpc`)
    priority: 11
    services:
    - name: argo-cd-argocd-server
      port: 80
      scheme: h2c
  tls:
    secretName: argo-cert

中间件

代码语言:javascript
运行
复制
API Version:  traefik.containo.us/v1alpha1
Kind:         Middleware
Metadata:
  Creation Timestamp:  2022-04-26T12:47:50Z
  Generation:          1
  Managed Fields:
    API Version:  traefik.containo.us/v1alpha1
    Fields Type:  FieldsV1
    fieldsV1:
      f:metadata:
        f:annotations:
          .:
          f:kubectl.kubernetes.io/last-applied-configuration:
      f:spec:
        .:
        f:basicAuth:
          .:
          f:secret:
    Manager:         kubectl-client-side-apply
    Operation:       Update
    Time:            2022-04-26T12:47:50Z
  Resource Version:  24871428
  UID:               8ba3ef4d-0514-44b5-a98d-a1a0790b989a
Spec:
  Basic Auth:
    Secret:  traefik-basic-auth
Events:      <none>

ArgoCD服务器包段

代码语言:javascript
运行
复制
Command:
      argocd-server
      --staticassets
      /shared/app
      --repo-server
      argo-cd-argocd-repo-server:8081
      --logformat
      text
      --loglevel
      info
      --redis
      argo-cd-argocd-redis:6379
      --insecure
    State:  Running
EN

回答 1

Stack Overflow用户

发布于 2022-04-27 20:20:29

问题是在traefik的标准配置yaml中。

代码语言:javascript
运行
复制
kind: IngressRoute
metadata:
  annotations:
    helm.sh/hook: post-install,post-upgrade
  creationTimestamp: "2022-03-21T12:36:11Z"
  generation: 3
  labels:
    app.kubernetes.io/instance: traefik
    app.kubernetes.io/managed-by: Helm
    app.kubernetes.io/name: traefik
    helm.sh/chart: traefik-10.15.0
  name: traefik-dashboard
  namespace: default
  resourceVersion: "15061579"
  uid: 53077805-d6cd-4d84-a159-388ca16f5cec
spec:
  entryPoints:
  - websecure
  routes:
  - kind: Rule
    middlewares:
    - name: test-auth
    match: Host(`traefik.example.de`) && PathPrefix(`/dashboard`) || PathPrefix(`/api`)
    services:
    - kind: TraefikService
      name: api@internal
  tls:
    secretName: traefik-cert
    namespace: default

如果您查看匹配的路由,您将看到该路由将匹配以"/api/“结尾的任何内容。这是非常不幸的,因为argocd依赖于调用"argocd.example.com/api/v1/“。

因此,对gui的第一次调用是有效的,但是一旦api试图加载任何设置或数据,来自traefik的"api“路由就会被击中。

它只是通过将完整的主机名/子域名添加到traefik“或”规则来修正。

代码语言:javascript
运行
复制
Host(`traefik.example.de`) && PathPrefix(`/dashboard`) || Host(`traefik.example.de`) && PathPrefix(`/api`)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72028189

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档