在线文档教程

服务器配置(公证) | Server configuration (Notary)

公证服务器配置文件

本文档适用于那些希望指定自定义选项的运行自己的公证服务

概述

公证服务器需要配置文件,并且必须使用命令行中的-config选项指定配置文件的路径。

公证服务器还允许您增加/减少日志记录级别,而无需重新启动。

下面是一个完整的服务器配置文件示例;请单击顶级JSON键,了解与该键对应的配置部分的更多信息:

{ "server": { "http_addr": ":4443", "tls_key_file": "./fixtures/notary-server.key", "tls_cert_file": "./fixtures/notary-server.crt" }, "trust_service": { "type": "remote", "hostname": "notarysigner", "port": "7899", "key_algorithm": "ecdsa", "tls_ca_file": "./fixtures/root-ca.crt", "tls_client_cert": "./fixtures/notary-server.crt", "tls_client_key": "./fixtures/notary-server.key" }, "storage": { "backend": "mysql", "db_url": "user:pass@tcp(notarymysql:3306)/databasename?parseTime=true" }, "auth": { "type": "token", "options": { "realm": "https://auth.docker.io/token", "service": "notary-server", "issuer": "auth.docker.io", "rootcertbundle": "/path/to/auth.docker.io/cert" } }, "logging": { "level": "debug" }, "reporting": { "bugsnag": { "api_key": "c9d60ae4c7e70c4b6c4ebd3e8056d2b8", "release_stage": "production" } }, "caching": { "max_age": { "current_metadata": 300, "consistent_metadata": 31536000, } }, "repositories": { "gun_prefixes": ["docker.io/", "my-own-registry.com/"] } }

服务器部分(必填)

例子:

"server": { "http_addr": ":4443", "tls_key_file": "./fixtures/notary-server.key", "tls_cert_file": "./fixtures/notary-server.crt" }

参数需要描述
http_addr要监听的TCP地址(IP和端口)。例如:“:4443”表示监听所有IP上的端口4443(因此所有接口,如运行ifconfig时列出的那些接口)“127.0.0.1:4443”表示只侦听本地主机上的端口4443。这意味着除了本地服务器之外,服务器将不可访问(通过SSH隧道或仅在本地终端上)
tls_key_file私钥用于HTTPS的路径。必须与tls_cert_file一起提供,或根本不提供。如果没有提供,服务器将使用HTTP而不是HTTPS。该路径相对于配置文件的目录。
tls_cert_file用于HTTPS的证书路径。必须与tls_key_file一起提供,或根本不提供。如果没有提供,服务器将使用HTTP而不是HTTPS。该路径相对于配置文件的目录。

  • ":4443"意味着在所有IP上的端口4443上侦听(因此所有接口,例如运行时列出的接口ifconfig

  • "127.0.0.1:4443"表示仅在本地主机上侦听端口4443。这意味着除了本地服务器之外,服务器将不可访问(通过SSH隧道或仅在本地终端上)

`tls_key_file` no The path to the private key to use for HTTPS. Must be provided together with `tls_cert_file`, or not at all. If neither are provided, the server will use HTTP instead of HTTPS. The path is relative to the directory of the configuration file. `tls_cert_file` no The path to the certificate to use for HTTPS. Must be provided together with `tls_key_file`, or not at all. If neither are provided, the server will use HTTP instead of HTTPS. The path is relative to the directory of the configuration file.

trust_service部分(必填)

本节配置远程信任服务,如公证人签字人或本地内存中的ED25519信任服务。

远程信任服务示例:

"trust_service": { "type": "remote", "hostname": "notarysigner", "port": "7899", "key_algorithm": "ecdsa", "tls_ca_file": "./fixtures/root-ca.crt", "tls_client_cert": "./fixtures/notary-server.crt", "tls_client_key": "./fixtures/notary-server.key" }

本地信托服务示例:

"trust_service": { "type": "local" }

参数是否需要描述
type 必须是“远程”或“本地”
hostname 若为remote则是远程信任服务的主机名
key_algorithm 若为remote则是 远程信任服务的GRPC端口
key_algorithm 若为remote则是 用于生成存储在签名服务上的密钥的算法。有效值是“ecdsa”,“rsa”和“ed25519”。
tls_ca_file签署远程服务的TLS证书的根CA的路径。如果所述根CA不在系统的默认信任根中,则必须提供此参数。该路径相对于配置文件的目录。
tls_client_key私钥用于TLS相互认证的路径。这必须与tls_client_cert一起提供,或根本不提供。该路径相对于配置文件的目录。
tls_client_cert证书用于TLS相互身份验证的路径。这必须与tls_client_key一起提供或根本不提供。该路径相对于配置文件的目录。

存储部分(必填)

存储部分指定服务器应该使用哪个存储后端来存储TUF元数据。只支持MySQL或内存存储。

DB存储示例:

"storage": { "backend": "mysql", "db_url": "user:pass@tcp(notarymysql:3306)/databasename?parseTime=true" }

参数是否需要描述
backend必须是“mysql”或“内存”。如果选择“内存”,则会忽略db_url。
db_url是的,如果不是内存用于访问数据库的数据源名称。(注意:请包含parseTime = true作为DSN的一部分)

身份验证部分(可选)

本节指定服务器的身份验证选项。目前,我们只支持令牌身份验证。

例子:

"auth": { "type": "token", "options": { "realm": "https://auth.docker.io", "service": "notary-server", "issuer": "auth.docker.io", "rootcertbundle": "/path/to/auth.docker.io/cert" } }

注意,整个部分是可选的。但是,如果您想要对服务器进行身份验证,那么您需要下面所需的参数来配置它。

令牌身份验证:

这是Docker注册表第2版​​使用的相同身份验证的实现。(基于JWT令牌的认证后登录。)

参数是否需要描述
类型必须是“令牌”; 所有其他值将导致无认证(其余参数将被忽略)
选项令牌认证的选项。请参阅注册表令牌配置文档以获取参数详细信息。

缓存部分(可选)

例子:

"caching": { "max_age": { "current_metadata": 300, "consistent_metadata": 31536000, } }

参数是否需要描述
MAX_AGE缓存服务通过角色的校验和缓存角色的最新元数据和元数据的最大时间(以秒为单位)。该值将在GET-ting元数据的缓存控制标头上设置。请注意,must-revalidate也在当前元数据的缓存控制标头上设置,因为无论何时将新的元数据登录到回购中,当前的元数据都可能会更改。一致的元数据不应该改变,尽管可能会被删除,所以最大年龄可能会更高。

存储库部分(可选)

例子:

"repositories": { "gun_prefixes": ["docker.io/", "my-own-registry.com/"] }

参数是否需要描述
gun_prefixes此服务器将接受的GUN前缀列表。以任何其他前缀开头的映像上的POST操作将被400拒绝,并且GET / DELETE操作将被404拒绝。

热日志记录级别重新加载

目前我们还不支持完全重新加载公证配置文件。我们现在支持的是:

  • 通过信令提高日志记录级别SIGUSR1

  • 通过信令降低日志记录级别SIGUSR2

例子:

增加日志记录级别

$ kill -s SIGUSR1 PID or $ docker exec -i CONTAINER_ID kill -s SIGUSR1 PID

减少日志记录级别

$ kill -s SIGUSR2 PID or $ docker exec -i CONTAINER_ID kill -s SIGUSR2 PID

如果您使用某种包装器启动脚本或某些类型的容器运行容器,则PID是进程IDnotary-server,并且可能不是PID 1进程。

你可以得到notary-server通过的PID

$ docker exec CONTAINER_ID ps aux or $ ps aux | grep "notary-server -config" | grep -v "grep"

相关信息

  • 公证签字人配置文件

  • 公证服务器和签名者常用的配置部分

docker, notary, notary-client, notary-server, notary server, notary-signer, notary signer