Redhat clair не удалось отправить уведомление через уведомитель

#docker #proxy #redhat #clair #quay.io

#docker #прокси #redhat #clair #quay.io

Вопрос:

В настоящее время я ищу, что я могу использовать clair для сканирования quayrepos. Вот некоторые основные сведения:

  • Версия Docker: 19.03.13
  • Версия Docker API: 1.40
  • Версия GO: go1.13.15
  • ОС: redhat 7.9
  • Версия контейнера (Redis, Postgres, Clair, Quay): последняя
  • Хранилище: RadisGWStorage
  • Quay DB: Mariadb (внешний сервер)
  • Clair DB: Postgres (работает на том же сервере, что и quay)
  • Redis, Postgres, Clair и Quay работают на одном сервере, но в разных контейнерах.

Моя проблема:

 {"Event":"could not send notification via notifier","Level":"error","Location":"notifier.go:173","Time":"2020-10-15 08:04:40.730379","error":"Post https://domain/secscan/notify: proxyconnect tcp: dial tcp IP:6063: connect: connection refused","notification name":"09c0498e-c30d-4f1b-9bb2-d07588351618","sender name":"webhook"}


{"Event":"giving up on sending notification : max attempts exceeded","Level":"info","Location":"notifier.go:157","Time":"2020-10-15 08:04:40.730431","max attempts":3,"notification name":"09c0498e-c30d-4f1b-9bb2-d07588351618","sender name":"webhook"}
  

Моя конфигурация для Clair:

     clair:
  database:
    type: pgsql
    options:
      # A PostgreSQL Connection string pointing to the Clair Postgres database.
      # Documentation on the format can be found at http//www.postgresql.org/docs/9.4/static/libpq-connect.html
      source:  postgresql://username:password@domain:5432/clairtest?sslmode=disable
      cachesize: 16384
  api:
    # The port at which Clair will report its health status. For example, if Clair is running at
    # https://clair.mycompany.com, the health will be reported at
    # http://clair.mycompany.com:6061/health.
    healthport: 6061

    port: 6062
    timeout: 900s

    # paginationkey can be any random set of characters. *Must be the same across all Clair instances*.
    paginationkey: "key"

  updater:
    # interval defines how often Clair will check for updates from its upstream vulnerability databases.
    interval: 6h
  notifier:
    attempts: 3
    renotifyinterval: 1h
    http:
      # QUAY_ENDPOINT defines the endpoint at which Quay is running.
      # For example: http://myregistry.mycompany.com
      endpoint: https://domain/secscan/notify
      proxy: https://domain:6063

jwtproxy:
  signer_proxy:
    enabled: true
    listen_addr: :6063
    ca_key_file: /certificates/mitm.key # Generated internally, do not change.
    ca_crt_file: /certificates/mitm.crt # Generated internally, do not change.
    insecure_skip_verify: true
    signer:
      issuer: security_scanner
      expiration_time: 5m
      max_skew: 1m
      nonce_length: 32
      private_key:
        type: preshared
        options:
          key_id: key
          private_key_path: /clair/config/security_scanner.pem

  verifier_proxies:
  - enabled: true
    # The port at which Clair will listen.
    listen_addr: :6060

    # If Clair is to be served via TLS, uncomment these lines. See the "Running Clair under TLS"
    # section below for more information.
    # key_file: /clair/config/clair.key
    # crt_file: /clair/config/clair.crt

    verifier:
      # CLAIR_ENDPOINT is the endpoint at which this Clair will be accessible. Note that the port
      # specified here must match the listen_addr port a few lines above this.
      # Example: https://myclair.mycompany.com:6060
      audience: https://domain:6060

      upstream: https://domain:6062
      key_server:
        type: keyregistry
        options:
          # QUAY_ENDPOINT defines the endpoint at which Quay is running.
          # Example: https://myregistry.mycompany.com
          registry: https://domain/keys/
      claims_verifiers:
      - type: static
        options:
          iss: jwtproxy
  

Итак, вы знаете, как решить эту проблему, или вы знаете, как я могу ее лучше отладить. Кстати, я пытался отладить его с помощью tcpdump, strace и wireshark.

Спасибо за вашу помощь!

Ответ №1:

Я решил это за пару часов до этого. Прежде всего, я изменил свой IP на 127.0.0.1: 6063. И после этого мы выяснили, что quay и clair не могут создать цепочку доверия к rootca, если вы не предоставите ему промежуточный ca. А потом мы узнали, что у clair был ключ с истекшим сроком действия, и он не смог создать новый. Итак, мы удалили все ключи, и после нескольких перезапусков он работал нормально.

LG VallingSki