Обслуживание ArgoCD за Traefik в Kubernetes

Я хотел бы запустить ArgoCD за Traefik, чтобы я мог получить доступ к веб-интерфейсу ArgoCD и взаимодействовать с API, используяargocdинструмент командной строки.

  • Я развернул ArgoCD в кластере Kubernetes из вышестоящих манифестов .

  • Я развернул Traefik как входной сервер из диаграммы управления . Я не устанавливал никаких значений диаграммы, кроме уровня журнала.

  • Я использую следующий ресурс Ingress:

            apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: argocd
    
    spec:
      tls:
        - hosts:
          - argocd.internal
          secretName: argocd-certificate
      rules:
        - host: argocd.internal
          http:
            paths:
              - path: /
                pathType: Prefix
                backend:
                  service:
                    name: argocd-server
                    port:
                      name: http
    
  • Секретargocd-certificateсуществует и имеет действительный сертификат и ключtls.crtиtls.key.

После этого я могу получить доступ к ArgoCD по адресуhttp://argocd.internal, но пытается получить к нему доступ по адресуhttps://argocd.internalпотерпеть неудачу с:

      $ curl https://argocd.internal
404 page not found

(Обратите внимание, что ошибки сертификата нет; конечная точка обслуживает сертификат, настроенный во входном ресурсе.)

Я не уверен, что здесь происходит: я не привязал это к какой-либо конкретной конечной точке Traefik, поэтому я ожидаю, что он будет доступен на всех конечных точках... и когда мы запрашиваем API Traefik, мы видим:

      $ curl -sf 'http://localhost:9000/api/http/routers?search=&status=&per_page=6&page=1' |
  jq '.[]|select(.service == "argocd-argocd-server-80")'
{
  "entryPoints": [
    "metrics",
    "web",
    "websecure"
  ],
  "service": "argocd-argocd-server-80",
  "rule": "Host(`argocd.internal`) && PathPrefix(`/`)",
  "status": "enabled",
  "using": [
    "metrics",
    "web",
    "websecure"
  ],
  "name": "argocd-argocd-argocd-internal@kubernetes",
  "provider": "kubernetes"
}

Это подтверждает, что маршрутизатор доступен на всех конечных точках.

Что здесь происходит? Почему кажется, что это работает правильно только при доступе черезhttp://и не черезhttps://?

Если это поможет, тоargocd-serverсервис выглядит так:

      apiVersion: v1
kind: Service
metadata:
  labels:
    app.kubernetes.io/component: server
    app.kubernetes.io/name: argocd-server
    app.kubernetes.io/part-of: argocd
  name: argocd-server
  namespace: argocd
spec:
  clusterIP: 10.96.117.77
  clusterIPs:
  - 10.96.117.77
  internalTrafficPolicy: Cluster
  ipFamilies:
  - IPv4
  ipFamilyPolicy: SingleStack
  ports:
  - name: http
    port: 80
    targetPort: 8080
  - name: https
    port: 443
    targetPort: 8080
  selector:
    app.kubernetes.io/name: argocd-server

0 ответов

Другие вопросы по тегам