#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