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
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
中间件
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服务器包段
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
发布于 2022-04-27 20:20:29
问题是在traefik的标准配置yaml中。
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“或”规则来修正。
Host(`traefik.example.de`) && PathPrefix(`/dashboard`) || Host(`traefik.example.de`) && PathPrefix(`/api`)
https://stackoverflow.com/questions/72028189
复制相似问题